问题描述
我有一个对象列表(列表列表),其中包含一个字符串和两个浮点值。我必须使用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']
列。