如何在对象列表中划分两个元素?

问题描述

我有一个对象列表(列表列表),其中包含一个字符串和两个浮点值。我必须使用lambda函数来划分两个浮点值。 这是我的示例数据:

listofObjects = [['I',5,9],['Y',7,13],['O',3,32]]

我的输出应该是相同的对象列表,并且还有一列,其值分别为9 / 5、13 / 7和32/3

listofObjects = [['I',9,1.8],13,1.85],32,10.66]]

这是我尝试过的:

avgValueList = list(map(lambda x,y: y[2]/x[1],listofObjects))

但这给我一个错误TypeError: <lambda>() missing 1 required positional argument: 'y'

解决方法

avgValueList = list(map(lambda x: x.append(x[2]/x[1]),listOfObjects))

listOfObjects的每个元素都是具有一个字符串和两个浮点数的列表。当您映射到listOfObjects时,这些列表中的每个列表都成为lambda的参数x。这意味着x[0]是字符串,x[1]是第一个浮点数,而x[2]是最后一个浮点数。因此lambda x: x[2]/x[1]包含3个元素的列表,并将最后一个元素除以中间元素。您不需要为lambda附加参数。由于您要追加到现有列表,因此应将x.append添加到lambda中,如下所示:lambda x: x.append(x[2]/x[1])。现在,lambda将获取一个包含三个元素的列表,计算最后两个元素之间的除法,然后在返回结果之前将该结果附加到列表的末尾。

,

我的解决方案使用pandas Python模块。

import pandas as pd

lst = [
    ['I',5,9],['Y',7,13],['O',3,32],]

df = pd.DataFrame(lst)
df['result'] = list(map(lambda x: x[2]/x[1],lst))
print(df)

您可以通过输入'df.result'或result来访问df['result']列。