Python 无法操作列表整数索引
我的代码执行以下操作,它读取一个N*N矩阵文件,例如My matrix.txt文件 2 3 4 1 2 6 9 8 9 并将其转换为列表整数[[2,3,4]、[1,2,6]、[9,8,9]] 哪个 然后在翻转时,通过将内部的值移动到索引的值来转换内部的值。例如[1][0]=1,因此列表[0][1]的值应该从3更改为1。[1][0]的值从1变为3 这使得转置矩阵后的最终输出应为 翻转所有值后[[2,1,9],[3,2,8],[4,6,9]] 请记住,如果索引与[0][0]或[1][1]或[2][2]中的索引相同,则不会发生任何情况 以下是我的代码,我无法获得最终输出,因为我认为我的交换算法有问题,任何帮助都将不胜感激Python 无法操作列表整数索引,python,list,matrix,swap,Python,List,Matrix,Swap,我的代码执行以下操作,它读取一个N*N矩阵文件,例如My matrix.txt文件 2 3 4 1 2 6 9 8 9 并将其转换为列表整数[[2,3,4]、[1,2,6]、[9,8,9]] 哪个 然后在翻转时,通过将内部的值移动到索引的值来转换内部的值。例如[1][0]=1,因此列表[0][1]的值应该从3更改为1。[1][0]的值从1变为3 这使得转置矩阵后的最终输出应为 翻转所有值后[[2,1,9],[3,2,8],[4,6,9]] 请记住,如果索引与[0][0]或[1][1]或[2][2
file =(input("Enter the filename: "))
f = open(file)
matrix = []
for line in f:
line = line.strip()
line = line.split()
if line:
for x in range(len(line)):
line[x] = int(line[x])
matrix.append(line)
transpose = []
for x in range(len(matrix)):
transpose.append([])
bob = transpose[x]
for y in range(len(bob)):
temp = 0
temp = matrix[x][bob[y]]
matrix[x][bob[y]] = matrix[y][bob[x]]
matrix[y][bob[x]] = temp
print(matrix)
print(transpose)
仅供参考,这可以很容易地用
zip()
函数代替。传入3个单独的数组(列表[0]、列表[1]、列表[2])并压缩它们基本上会按列重新对齐元素。所以[[2 3 4],[1 2 6],[9 8 9]]变成了[[2 1 9],[3 2 8],[4 6 9]]
>>> lista = [2,3,4]
>>> listb = [1,2,6]
>>> listc = [9,8,9]
>>> new = zip(lista, listb, listc)
>>> for row in new:
... print(row)
(2, 1, 9)
(3, 2, 8)
(4, 6, 9)
使用
可以找到其他更传统的方法,特别是使用嵌套循环的矩阵转置 问题是什么?你的代码有效吗?它做什么/不做什么是不正确的?示例输入的预期输出是什么?“因此列表[0][1]的值应该从2更改为1”:不是从3更改为1吗?是的,您是对的,它应该从3更改为1,轻微的输入错误对此表示抱歉。我的问题是如何修复交换算法,因为我无法获得最终输出。示例输入的预期输出应该是[[2,1,9],[3,2,8],[4,6,9]。您可以解释一下函数zip()和*matrix对zip函数的作用吗?我在帖子中包含了一个指向
zip
文档的链接<代码>矩阵是从示例中的文件构建的列表列表。*
从矩阵
中解压子列表。请说明为什么当您投票时,答案在评论中没有帮助
>>> list(zip(*matrix))
[(2, 1, 9), (3, 2, 8), (4, 6, 9)]
>>>