首页 > 解决方案 > 如何让列表的元素相互交互?

问题描述

 BMI= weight in kg/ height in meters**2

print(person_data2)
[['John', 84.9, 184],
 ['Ryan', 81.8, 177],
 ['Bobby', 86.1, 190],
 ['Pete', 92.2, 188],
 ['Esther', 69.6, 159],
 ['Jane', 72.0, 166],
 ['Samantha', 51.3, 162]]

for p, person in enumerate (person_data2):
  person_data2[p][2]=person_data2[p][2]/100
print (person_data2)

for p, person in enumerate (person_data2):

我似乎无法通过这部分。我将身高除以 100 来计算每个人的身高,但现在我无法为 BMI 方程创建 for 循环。我试过了

for p, person in enumerate (person_data2):
   person_data2[p][1][2]=person_data2[p][1]/[2]**2  #and I have tried
for p, person in enumerate (person_data2):
  person_data2[p][1][2]=person_data2[p][1]/[p][2]**2 

标签: python

解决方案


您可以为此使用 lambda 函数

BMI= weight in kg/ height in meters**2

 print(person_data2)
 li = [['John', 84.9, 184],
 ['Ryan', 81.8, 177],
 ['Bobby', 86.1, 190],
 ['Pete', 92.2, 188], 
['Esther', 69.6, 159],
 ['Jane', 72.0, 166],
 ['Samantha', 51.3, 162]]

listOfBMIs= list(map(lambda x:x[1]/(x[-1]/100),li))
print(listOfBMIs)

解释:

当您说 时lambda x:x+1,这意味着它需要一个数字并在其上加一。

当你说map(lambda x:x+1,[1,2,3,4])

Map 获取数组的每个元素并将其映射到 lambda 函数,因此每个元素都被获取并添加一个。

同样,在您的问题中,我们正在获取您的数组数组中的每个元素。像这样把它放在 lambda 函数中:

lambda x:x[1]/(x[-1]/100) 可以看作

lambda ['John', 84.9, 184] : 84.9/(184 /100)

第一次迭代。同样对于第二次迭代等等......

添加在..

一种更快的方法可能是做到这一点

listOfBMIs= [i[1]/(i[-1]/100) for i in li]

有时,映射中的 lambda 在正常的 forloop 规则下会减慢它的速度。

希望这可以帮助。


推荐阅读