Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法操作列表整数索引_Python_List_Matrix_Swap - Fatal编程技术网

Python 无法操作列表整数索引

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

我的代码执行以下操作,它读取一个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)]
>>>