我有一个对象列表(列表列表(,其中包含一个字符串和两个浮点值。我必须使用lambda函数来划分这两个浮点值。这是我的样本数据:
listOfObjects = [['I', 5, 9], ['Y', 7, 13],['O', 3, 32]]
我的输出应该是相同的对象列表,还有一列的值分别为9/5、13/7和32/3
listOfObjects = [['I', 5, 9, 1.8], ['Y', 7, 13, 1.85],['O', 3, 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"或df['result']
来访问result
列。