【问题标题】:How to fix "IndexError: list index out of range"如何修复“IndexError:列表索引超出范围”
【发布时间】:2019-09-15 22:02:15
【问题描述】:

我正在尝试计算列表中迟到的人数(负数)。输入数据后,我得到了 Traceback

'IndexError: list index out of range'

巴士路线分为 4 周,每条有 5 个值(The Weekday's)。代码所做的第一件事就是将这些周加在一起,为整个路线组合一个列表。然后我用一个 for in 循环来计算每个值,看看它是否是一个负数,然后将它添加到一个名为 'VarBUSANoLate' 的计数中

VarBUSANoLatelist = (VarBUSA1 + VarBUSA2 + VarBUSA3 + VarBUSA4)
for Counter in VarBUSANoLatelist[0:20]:
    if VarBUSANoLatelist[Counter] < 0:
        VarBUSANoLate = VarBUSANoLate + 1

我应该得到那个组迟到的数字,但只是得到这个错误'IndexError: list index out of range'

【问题讨论】:

  • 什么是len(VarBUSANoLatelist)? (也可以解决这个问题VarBUSANoLate = sum(1 for i in VarBUSANoLatelist if i &lt; 0)
  • 你能把你在代码中提到的所有变量的值加起来吗?

标签: python python-3.x


【解决方案1】:

有两种迭代 for 循环的方法,您将两种方法混合使用。

  1. 第一种方法是使用索引

    for Counter in range(20):
        if VarBUSANoLatelist[Counter] < 0:
            VarBUSANoLate = VarBUSANoLate + 1
    
  2. 另一种方法是使用数组本身的元素

    for Counter in VarBUSANoLatelist[0:20]:
        if Counter < 0:
            VarBUSANoLate = VarBUSANoLate + 1
    

【讨论】:

    【解决方案2】:

    你误解了 for 循环;您的变量 Counter 包含值,而不是值的索引。 并且因为它们是值,如果值恰好大于列表中元素的数量,VarBUSANoLatelist[Counter] 部分将引发错误。

    这意味着您可以将循环更改为:

    for v in VarBUSANoLatelist[0:20]:
        if v < 0:
            VarBUSANoLate = VarBUSANoLate + 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2015-06-26
      • 1970-01-01
      相关资源
      最近更新 更多