繁体   English   中英

为什么会出现“列表分配索引超出范围”错误?

[英]Why am I getting “list assignment index out of range” error?

我不断收到相同的错误:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
IndexError: list assignment index out of range

以下代码有什么问题?

myList = [([None] * 8) for x in range(16)]

for i in range(0,7):
    for j in range(0,15):
        myList[i][j] = 2 * i

您的索引反转了; 外部列表有16个元素,但是您试图索引内部列表超过8个元素。

那是因为您的列表理解构建了每个8个值的16个列表,所以len(myList)为16,而len(myList[0])为8。

反转范围:

for i in range(15):
    for j in range(7):
        myList[i][j] = 2 * i

或尝试对myList进行索引时反转ij的使用:

for i in range(7):
    for j in range(15):
        myList[j][i] = 2 * i

请注意,外部myList现在正在使用j并且每个嵌套内部列表都由i索引。

ij 忽略了最后一个元素,如果不是故意的,则使用816而不是715

清单理解

myList = [([None] * 8) for x in range(16)]

可以这样理解

mylist = []
for x in range(16):
    mylist.append([None] * 8)

因此,您正在创建一个包含16个列表的列表,每个列表包含8个None 但是随着循环

for i in range(0,7):
    for j in range(0,15):

您正在尝试访问前7个列表中的15个元素。 这就是为什么它失败了。 相反,您可能想做

for i in range(16):
    for j in range(8):
        ...

实际上,您可以在列表理解中执行相同的操作,就像这样

[[2 * i for j in range(8)] for i in range(16)]

演示:

>>> from pprint import pprint
>>> pprint([[2 * i for j in range(8)] for i in range(16)])
[[0, 0, 0, 0, 0, 0, 0, 0],
 [2, 2, 2, 2, 2, 2, 2, 2],
 [4, 4, 4, 4, 4, 4, 4, 4],
 [6, 6, 6, 6, 6, 6, 6, 6],
 [8, 8, 8, 8, 8, 8, 8, 8],
 [10, 10, 10, 10, 10, 10, 10, 10],
 [12, 12, 12, 12, 12, 12, 12, 12],
 [14, 14, 14, 14, 14, 14, 14, 14],
 [16, 16, 16, 16, 16, 16, 16, 16],
 [18, 18, 18, 18, 18, 18, 18, 18],
 [20, 20, 20, 20, 20, 20, 20, 20],
 [22, 22, 22, 22, 22, 22, 22, 22],
 [24, 24, 24, 24, 24, 24, 24, 24],
 [26, 26, 26, 26, 26, 26, 26, 26],
 [28, 28, 28, 28, 28, 28, 28, 28],
 [30, 30, 30, 30, 30, 30, 30, 30]]

注意:我在range函数中使用了168 ,因为默认情况下,它从0开始并进行迭代,直到将参数传递给它-1。因此,分别为0到15和0到8。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM