Python 如何是';列表索引超出范围';?

Python 如何是';列表索引超出范围';?,python,Python,执行此代码显示:列表索引超出范围 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 请注意,我在编程方面是一个完全的业余爱好者,因此无法在基本任务上帮助自己。谢谢 您面临的困难是无法通过分配给不存在的元素来扩展列表 你可

执行此代码显示:
列表索引超出范围

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

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

您面临的困难是无法通过分配给不存在的元素来扩展列表

你可以使用字典做你想做的事情,就像这样,因为有了字典,你可以通过分配新元素来创造新元素:

s= {}
for i in range(1,x):
    for j in range(1,y):
        s[i,j]= i*j
但是如果你真的想要一个列表列表,你必须使用
append()
建立每个列表。使用
x,y==(4,5)

这并不能完全实现原始代码的目的,因为Python列表是基于零的,并且您希望最低的x和y索引为1。所以

>>> s[2][3]
12
使用
x,y==(4,5)
您可能期望该矩阵包含20个元素,而不是12个元素。得到12的原因是
range(1,n)
生成的元素序列最多为
n,但不包括
n


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

您已经将数组
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
。例如,您可以在
x
y
中添加一个元素,以获得额外的维度。

因为您得到了空列表
s=[]
sou,如果i-th元素不存在,您就不能请求它。您使用了Python 3标记,但您的代码使用了Python 2
print
语法。它是哪一个?我建议您浏览一个像样的Python教程()的列表部分。它是Python3。感谢您指出@glibdud如果您找到一个教程并按照自己的方式学习,您实际上可以帮助自己完成基本任务。我们不是辅导服务,这很有帮助。谢谢。
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]]