Python不使用numpy实现二维数组右旋转90度的报错解决
错误原因
- 你的
auxiliaryArray初始化后是空列表,不存在任何子列表和元素,直接通过索引auxiliaryArray[indexCol][rowLength - 1 - indexRow]赋值,会因为访问不存在的索引位置抛出越界错误。 - 二维数组向右旋转90度后,新数组的行数等于原数组的列数,新数组的列数等于原数组的行数,需要先按照这个维度预先初始化辅助数组的结构,再做元素赋值。
修复后可运行代码
multiarray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] rowLength = len(multiarray) colLength = len(multiarray[0]) # 预先初始化辅助数组,维度为原列数*原行数,先填充占位值 auxiliaryArray = [[0 for _ in range(rowLength)] for _ in range(colLength)] for indexRow in range(rowLength): for indexCol in range(colLength): auxiliaryArray[indexCol][rowLength - 1 - indexRow] = multiarray[indexRow][indexCol] print(auxiliaryArray)
运行后输出和你期望的一致:[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
更简洁的原生Python实现(可选)
如果不想提前初始化占位数组,也可以用内置的zip方法搭配反转逻辑实现,代码更简短:
multiarray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] rotated = [list(row) for row in zip(*multiarray[::-1])] print(rotated)
实现逻辑:先把原数组的行顺序倒转,再按列打包元素,最后把打包后的元组转成列表即可得到右旋转90度的结果。
内容的提问来源于stack exchange,提问作者Zukashi
相关产品推荐
相关产品推荐

