Python 为什么我的循环只返回一个答案,而不是整个列表的答案?

Python 为什么我的循环只返回一个答案,而不是整个列表的答案?,python,loops,Python,Loops,我正试着为兰姆达学校做一个课前作业,循环让我最头疼。我有一个2d名单,上面有身高和体重。高度以厘米为单位,所以我使用了一个循环将其转换为米。然后,为了计算体重指数,我试着跑l;哦,但它一直只给我最后一个。让我键入代码,使其更有意义 person_data2 [['John', 84.5, 184], ['Ryan', 81.8, 177], ['Bobby', 86.1, 190], ['Pete', 92.2, 188], ['Esther', 69.6, 159], ['Jane

我正试着为兰姆达学校做一个课前作业,循环让我最头疼。我有一个2d名单,上面有身高和体重。高度以厘米为单位,所以我使用了一个循环将其转换为米。然后,为了计算体重指数,我试着跑l;哦,但它一直只给我最后一个。让我键入代码,使其更有意义

person_data2

[['John', 84.5, 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 i, person in enumerate(person_data2):
  person_data2[i][2] = person_data2[i][2] / 100

print(person_data2)

[['John', 84.5, 1.84], 
['Ryan', 81.8, 1.77], 
['Bobby', 86.1, 1.9], 
['Pete', 92.2, 1.88], 
['Esther', 69.6, 1.59], 
['Jane', 72.0, 1.66], 
['Samantha', 51.3, 1.62]]
体重指数=体重/(身高^2) 所以我做了这个

for i, person in enumerate(person_data2):
  BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))

print (BMI2)

19.547325102880652
为什么它只运行最后一个嵌套列表BMI,即Samanthas BMI,而不运行其余的?TBH我不完全理解循环,从cm到m的转换有点复制粘贴和反复试验。有人能指出我做错了什么吗?如果您知道我可以使用哪些资源来帮助我解决这个问题,我也会非常感激。

欢迎来到StackOverflow。 您的
print()
已超出循环,只需将代码更改为此,然后将
print()
放入循环:

for i, person in enumerate(person_data2):
  BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))
  print (BMI2)

如果只想打印值,在循环内使用“打印”将有助于:


for i, person in enumerate(person_data2):
  BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))
  print (BMI2)

输出:

24.958648393194707
26.109993935331477
23.850415512465375
26.086464463558173
27.530556544440483
26.1286108288576
19.547325102880652
[24.958648393194707,
 26.109993935331477,
 23.850415512465375,
 26.086464463558173,
 27.530556544440483,
 26.1286108288576,
 19.547325102880652]
但如果要在循环结束时返回列表,请尝试将值存储在如下列表中:

BMI2=[]
for i, person in enumerate(person_data2):
  x = ((person_data2[i][1])/(person_data2[i][2]**2))
  BMI2.append(x)

print (BMI2)
输出:

24.958648393194707
26.109993935331477
23.850415512465375
26.086464463558173
27.530556544440483
26.1286108288576
19.547325102880652
[24.958648393194707,
 26.109993935331477,
 23.850415512465375,
 26.086464463558173,
 27.530556544440483,
 26.1286108288576,
 19.547325102880652]

BMI2
在每个循环迭代中被覆盖。由于您的
打印
在循环之外,因此输出将是上次计算的
BMI2
(上次迭代的输出)

尝试以下操作以打印数据集中每个人的bmi:

for i, person in enumerate(person_data2):
    BMI2 = ((person_data2[i][1])/(person_data2[i][2]**2))
    print (BMI2)

在循环内打印。按照你的方式,你只打印最后一个值。你想让BMI2成为一个列表吗?是的,我想让BMI2返回一个包含所有人的列表。我想,这件小事让我毛骨悚然。我刚开始学习Python,但慢慢掌握了窍门。谢谢@Chiamakaezaeamama祝你学习python好运,并一直努力提高你的技能。你棒极了!非常感谢你!谢谢,这就是我所要做的!