怎么'列表索引超出范围'?

时间:2018-05-01 12:40:34

标签: python

执行此代码显示:list index out of range

x= int(input("Enter the row number"))
y= int(input("Enter the column number"))
s= []
for i in range(1,x):
    for j in range(1,y):
        s[i][j]= i*j
    print s

请注意我在编程方面是一个完全的业余爱好者因此无法帮助自己完成基本任务。谢谢!

2 个答案:

答案 0 :(得分:3)

您遇到的困难是您无法通过分配不存在的元素来扩展列表。

你可以使用字典做你想做的事情,比如这样,因为你可以通过字典来 创建新元素,只需要分配它们:

s= {}
for i in range(1,x):
    for j in range(1,y):
        s[i,j]= i*j

但是如果你真的想要一个列表列表,你必须使用append()构建每个列表。使用x,y == (4,5)

>>> s = []
>>> for i in range(1,x):
        s.append([])
        for j in range(1,y):
            s[-1].append (i*j)

>>> s
[[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12]]

这并没有完全达到原始代码的目的,因为Python列表是从零开始的,并且您希望最低的 x y 索引是1.所以

>>> s[2][3]
12

使用x,y == (4,5)你可能一直希望这个矩阵有20个元素而不是12个。你得到12的原因是range(1,n)产生一系列元素,但不包括< / em> n

如果你真的在Python 3中编程,那么你需要编写print(s),因为在Python 3中,print是一个函数而不是一个语句。

答案 1 :(得分:2)

您已将数组s初始化为空,因此任何赋值都会超出范围错误。对于数字数组,您可以使用以下方法对其进行初始化:

x = int(input("Enter the row number: "))
y = int(input("Enter the column number: "))

s = [[0] * y for _ in range(x)]

for i in range(x):
    for j in range(y):
        s[i][j] = i * j

print s

例如:

Enter the row number: 5
Enter the column number: 3
[[0, 0, 0], [0, 1, 2], [0, 2, 4], [0, 3, 6], [0, 4, 8]]

注意:Python中的数组以[0][0]开头,因此最后一个位置为s[4][2],其中包含2 * 4。例如,您可以向xy添加一个以获得额外的维度。