在for循环内递增时列出索引超出范围

时间:2018-09-02 05:48:11

标签: python arrays list indexing transpose

只是Python的新手。我正在尝试不使用numpy来查找矩阵的转置。我的代码如下所示:

import fileinput

order = int(raw_input())
arr_input = [int(num) for num in raw_input().split(' ')]
arr = []
index = 0
for i in range(order):
    for j in range(order):
        arr[j][i] = arr_input[index] 
        print(index, i , j)
        index += 1

print(arr)

它说IndexError: list index out of range,据我所知,循环在index递增到9时终止,但是我没有访问arr_input[9],那为什么会出错?任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

这是循环的第一次迭代中发生的事情:

arr = []
i = 0
j = 0
arr[i][j] = ...

REPL中试用。

>>> arr = []
>>> i = 0
>>> j = 0
>>> arr[i][j] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

那怎么了?

  • arr[0][0] = 1的意思是“将列表arr[0]的第一项设置为1。”

  • arr[0]的意思是“列表arr的第一项。”

  • arr是一个空列表;它没有第一项。因此,该程序状态的表达式arr[0]是错误的。

我们如何解决?我们需要确保为每行创建一个列表。

# Create a blank matrix
for j in range(order):
    arr[j] = []

# Now fill in the values
for i in range(order):
    for j in range(order):
        arr[j][i] = ...

答案 1 :(得分:0)

您必须稍微修改一下代码才能使其正常工作。

import fileinput

order = int(input())
arr_input = [int(num) for num in input().split(' ')]
arr = []
index = 0

for j in range(order):
    arr.append([])

for i in range(order):
    for j in range(order):
        print(index, i , j)
        arr[j].append(arr_input[index])
        index += 1

print(arr)

我可以解释为什么出现IndexError:列表索引超出范围

arr[j][i] = arr_input[index] 

通过这一行代码,您尝试访问数组arr的第j行和第i列,但是arr只是一个空数组。 所以首先您必须这样做

for j in range(order):
        arr.append([])

p.s:在为空数组分配值时,请始终使用append()方法来避免“列表索引超出范围错误”。

希望这对您有帮助