python - 如何让列表的元素相互交互?
问题描述
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
解决方案
您可以为此使用 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 规则下会减慢它的速度。
希望这可以帮助。
推荐阅读
- javascript - 从 javascript 调用 api 时没有得到任何响应的错误
- python - 当指定的纪元数结束时如何获得回调?
- javascript - 为什么我的异步 mongodb 查询功能挂起?
- android - Kotlin - 指定为非空的参数为空
- php - 在 laravel 自己的包中创建自定义助手
- cordova - 如何在覆盖离子项目时绕过所有提示
- hbase - hbase table split region卡住了,怎么解决
- c - 试图理解为什么这个 For 循环有这个输出
- python - 为 n 行打印以下模式。例如。N = 5 1 1 12 21 123 321 1234 4321 1234554321
- android - 如何使用正文中的两个字段进行改造