首页 > 解决方案 > 在for循环内递增时列表索引超出范围

问题描述

只是 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],那么为什么会出现错误?任何帮助,将不胜感激。谢谢你。

标签: pythonarrayslistindexingtranspose

解决方案


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

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] = ...

推荐阅读