我正在尝试append
到一个多维数组。
这是我到目前为止所做的:
arr=[[]]
for i in range(10):
for j in range(5):
arr[i].append(i*j)
print i,i*j
print arr
这是我的预期输出:
[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8],[0,3,6,9,12],[0,4,8,12,16],[0,5,10,15,20],[0,6,12,18,24],[0,7,14,21,28],[0,8,16,24,32],[0,9,18,27,36]]
但是,我收到此错误:
IndexError
:列表索引超出范围
答案 0 :(得分:5)
您需要按以下方式定义初始数组:arr=[[] for i in range(10)]
,因为您无法将值附加到不存在的数组(这是i>=1
时发生的情况)。因此代码应如下所示:
arr=[[] for i in range(10)]
for i in range(10):
for j in range(5):
arr[i].append(i*j)
print(i,i*j)
print(arr)
答案 1 :(得分:2)
您忘记事先附加空列表。因此,当您尝试IndexError
时,为什么会得到arr[i]
。
arr = []
for i in range(10):
arr.append([])
for j in range(5):
arr[i].append(i*j)
答案 2 :(得分:2)
作为others have pointed out,您需要确保您的列表列表最初填充了十个空列表(而不是一个),以便连续的元素正确append
。
但是,我可能建议使用terser嵌套列表理解,这样可以通过在单个语句中创建列表来完全避免问题:
arr = [[i*j for j in range(5)] for i in range(10)]
答案 3 :(得分:0)
您只使用1个元素作为arr
初始化array
,因此当i
大于0
时,您会出现此类错误。您可以使用list comprehensive
归档您的目的:
[[i * j for j in range(5)] for i in range(10)]