无法操纵列表整数索引

时间:2017-11-24 06:01:24

标签: python list matrix swap

我的代码执行以下操作,它读取N * N矩阵文件,例如我的matrix.txt文件是

2 3 4

1 2 6

9 8 9

并将其转换为列表整数[[2,3,4],[1,2,6],[9,8,9]]

其中 然后通过在翻转时将内部值移动到索引的值来转换内部值。例如。 [1] [0] = 1,所以list [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)

3 个答案:

答案 0 :(得分:0)

仅供参考,这可以很容易地由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)

答案 1 :(得分:0)

使用zip()

>>> list(zip(*matrix))
[(2, 1, 9), (3, 2, 8), (4, 6, 9)]
>>>

答案 2 :(得分:-1)

其他更多传统方法可以找到here,尤其是使用嵌套循环的矩阵转置。