只是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]
,那为什么会出错?任何帮助,将不胜感激。谢谢。
答案 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()方法来避免“列表索引超出范围错误”。
希望这对您有帮助