python - 在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]
,那么为什么会出现错误?任何帮助,将不胜感激。谢谢你。
解决方案
这是循环的第一次迭代发生的情况:
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] = ...
推荐阅读
- react-native - 在本机反应中动态创建组件
- java - 如何解决错误:java.lang.IllegalStateException:无法执行 CommandLineRunner
- pandas - pandas.DataFrame.to_markdown 将大整数转换为浮点数
- pointers - 知道为什么这个函数在循环队列中这样定义吗?
- spring-boot - Flutter websocket连接问题 - 连接未升级到websocket
- android - 如何在 Flutter 中使用 GestureDetector 隐藏 appBar?
- javascript - 在 JavaScript 中保持矩形的纵横比
- python - 需要了解如何在 python 中从一个目录开始导入模块
- rust - 混合选择!Rust 中的异步调用
- uml - 我应该在我的用例图中包含系统作为参与者吗?