如何使用lambda插入列表中两个其他值的和
这是我目前的代码:
# Defining the results
Results =[["Harry",20,25],["Sandra",10,12],["Michelle",23,21],["Mike",18,16]]
#Adding the two test scores and appending them onto each persons list
Results.insert(lambda [x][3],Results[x][1] + Results[x][2])
#Printing the result to check the insert worked
print(Results)
#
我想把每个用户的两个测试结果(分别在列表的第1和第2个位置)合并,生成一个新的结果放在第3个位置,也就是每个用户自己列表的最后面。
我尝试过使用.insert()函数和lambda函数来实现这个功能。但是在第五行(箭头指向的地方)出现了语法错误,我不太确定怎么用lambda来完成这个操作。我也试过用.append()函数,但也没有成功。
↓
Results.insert(lambda [x][3],result[x][1] + result[x][2])
2 个回答
1
根据我理解你的问题,下面是我的回答:
results = map(lambda x: [x[0],x[1],x[2],x[1]+x[2]], results)
我修改了上面的代码,让它返回一个列表的列表,而不是元组,这是我的错误。这个代码会把结果 [["Harry",20,25],["Sandra",10,12],["Michelle",23,21],["Mike",18,16]] 转换成 [['Harry', 20, 25, 45], ['Sandra', 10, 12, 22], ['Michelle', 23, 21, 44], ['Mike', 18, 16, 34]] 这样的格式。
3
我建议用一种叫做列表推导式的方法来重建这个列表,像这样:
>>> [result + [result[1] + result[2]] for result in Results]
[['Harry', 20, 25, 45], ['Sandra', 10, 12, 22], ['Michelle', 23, 21, 44], ['Mike', 18, 16, 34]]
我们会遍历Results
列表,对于每一个单独的结果,我们会创建一个新的结果列表,最后一个元素是第二个和第三个元素的和。
补充:如果你想用lambda
,可以把列表推导式换成map
函数,像这样:
>>> map(lambda result: result + [result[1] + result[2]], Results)