【问题标题】:Python keeps returning blank list when trying to append?尝试追加时Python不断返回空白列表?
【发布时间】:2020-12-02 19:14:31
【问题描述】:

python 新手并尝试学习 for 循环。尝试从两个列表中获取值来计算每个人的 BMI,但一直得到一个空白列表。

heights = [184, 177, 190, 188, 159, 166]

weights = [84.9, 81.8, 86.1, 92.2, 69.6, 72.0 ]

BMIS = []

for i, bmi in BMIS:

  BMIS.append(weights[i] / heights[i])

print(BMIS)

【问题讨论】:

  • 太明显了,BMIS 是一个空列表。迭代将发生 0 次。

标签: python for-loop append


【解决方案1】:

您正在循环遍历 BMIS,它是一个空列表。循环遍历高度或权重

heights = [184, 177, 190, 188, 159, 166]
weights = [84.9, 81.8, 86.1, 92.2, 69.6, 72.0 ]
BMIS = []
for i in range(len(heights)):
    BMIS.append(weights[i] / heights[i])
 print(BMIS)

【讨论】:

  • 从未意识到,我已经看了好几个小时了,哈哈。非常感谢!
【解决方案2】:

列表中没有您试图循环的内容。 for 循环体中的代码永远不会被执行。您可以将 for 循环更改为:

for height, weight in zip(heights, weights):
    BMIS.append(weight/height)

【讨论】:

    【解决方案3】:

    假设权重列表的高度总是相同的 len(),你可以循环使用它作为你的范围

    heights = [184, 177, 190, 188, 159, 166]
    
    weights = [84.9, 81.8, 86.1, 92.2, 69.6, 72.0 ]
    
    BMIS = []
    
    for i in range(len(heights)):
    
      BMIS.append(weights[i] / heights[i])
    
    print(BMIS)
    

    【讨论】:

    • 非常感谢!没想到我可以这样使用 len 函数,效果很好!
    【解决方案4】:

    您正在循环一个空列表。只需使用zip 一次循环遍历每个列表。

    for height, weight in zip(heights, weights):
        BMIS.append(weight / height)
    

    这种理解将产生相同的列表:

    BMIS = [weight/height for height, weight in zip(heights, weights)]
    

    【讨论】:

    • 非常感谢!这是第一次看到 zip 功能。很好的帮助!
    【解决方案5】:

    欢迎来到 StackOverFlow。让我们检查一下你的主 for 循环:

    for i, bmi in BMIS:
    
      BMIS.append(weights[i] / heights[i])
    

    由于您正在初始化 BMIS = [],因此您正在迭代一个空列表。更好的方法是在这样的范围内迭代:

    for i in range(0, len(heights)):
        BMIS.append(weights[i] / heights[i])
    

    这样您就可以访问每个列表的第 i 个位置,进行除法并将结果附加到您的 BMIS 列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2019-08-26
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      相关资源
      最近更新 更多