简单python for循环上的列表索引超出范围错误

Posted

技术标签:

【中文标题】简单python for循环上的列表索引超出范围错误【英文标题】:List index out of range error on simple python for loop 【发布时间】:2018-05-19 20:15:26 【问题描述】:

有人可以向我解释为什么这个 for 循环不起作用。我试图在另一个程序中使用类似的东西来循环使用这个 N 作为参数的列表。

    N = [20,40,60,80]

    for j in N:
        print(j)
        for i in range(0,N[j]):
            print(i)

提前致谢!

【问题讨论】:

你的目标是什么? 为什么它不起作用?你期待什么结果? N 是在模拟盒子中弹跳的球数。最终目标是计算在不同温度下使用不同数量的球施加的压力。但由于某种原因,我陷入了这个看似简单的列表错误 j 是来自N 的值,而不是index 所以你得到N[80]N 没有那么多元素。 - 使用range(0, j) @furas 它告诉我“for i in range(0,N[j]):” is a IndexError: list index out of range 【参考方案1】:

您超出了范围,因为 j 正在获取 N 数组元素的值,而不是索引。因此,j 不是 0、1、2、3,而是 20、40、60、80。 因此,当您到达for i in range((0, N[j]) 时,您要求的是 N[20],这远远超出了 N 列表的长度。

你可以这样做:

N = [20,40,60,80]

for j in range(len(N)):
#        ^^^^^^^^^^^^^
    print(j)
    for i in range(0,N[j]):
        print(i)

【讨论】:

很高兴它有帮助。如果你喜欢我的回答,请选择它,然后回去学习! :)【参考方案2】:

你可以使用枚举

N = [20,40,60,80]
for index, j in enumerate(N):
    print(j)
    for i in range(0,N[index]):
        print(i)

【讨论】:

【参考方案3】:

试试:

for i in range(0,j):

代替:

for i in range(0,N[j]):

因为N[j] 将访问超出列表中内容的方式,例如N[80],它不存在。这就是您收到IndexError: list index out of range 错误的原因。

要解决此问题,您需要在外循环上应用range()

for i in range(len(N)):
    print(i)
    for j in range(0, N[i]):
        print(j)

当将它应用于内部循环中的range() 时,它只查看N 的索引i,而不是实际元素,它们要大得多。

如果你想访问列表中关于索引的实际内容,试试这个:

N = [20,40,60,80]
for i in range(len(N)):
    print(i, "->", N[i])

哪些输出:

0 -> 20
1 -> 40
2 -> 60
3 -> 80

如果你只想要数字:

for number in N:
    print(number)

如果您希望以更 Python 的方式同时使用索引和数字:

for index, number in enumerate(N):
    print(index, "->", number)

哪些输出:

0 -> 20
1 -> 40
2 -> 60
3 -> 80

【讨论】:

以上是关于简单python for循环上的列表索引超出范围错误的主要内容,如果未能解决你的问题,请参考以下文章

C# - 在for循环中使用相同的列表大小,索引超出了数组的范围[重复]

Python循环:列表索引超出范围

在python IndexError中使用for循环反转字符串:字符串索引超出范围[重复]

Networkx:通过循环遍历节点列表添加属性时,IndexError:列表索引超出范围

我继续得到indexerror:python上的索引列表超出范围

Python:IndexError:列表索引超出范围