首页 > 解决方案 > 如何在不复制的情况下更改列表列表?

问题描述

我有一个在列表列表中给出的矩阵:

board = [[1, 0, 0, 1], [-1, -1, 1, 1], [0, 0, 0, 0]]

我想要做的是改变板但不复制。我想将其更改为列板:

def foo(board):

    change board to columns board

board = foo(board)

这是结果:

board = [[1, -1, 0], [0, -1, 0], [0, 1, 0], [1, 1, 0]]

问题是它创建了一个具有相同名称(板)的新变量,并且不会更改原始板。

我需要更换原板,因为之后我需要在不同的地方使用它。

不能退回电路板,因为我很乐意不考虑它(不允许)。

甚至尝试过:

a = foo(board)
board.clear()
board += a

这应该可以工作,但由于某种原因我的程序出错了。任何帮助,将不胜感激

标签: pythonlist

解决方案


可以就地做,但由于它改变了董事会的整个结构(子列表的数量等),恕我直言,它没有多大意义,而且看起来有点不自然。如果唯一的问题是您有其他引用指向同一个板,您可以分配给切片以用新板board[:]覆盖所有内容,而无需为其本身分配新值。boardboard

def swap(b):
    return list(map(list, zip(*b)))

>>> board = [[1, 0, 0, 1], [-1, -1, 1, 1], [0, 0, 0, 0]]
>>> also_board = board
>>> board[:] = swap(board)
>>> also_board
[[1, -1, 0], [0, -1, 0], [0, 1, 0], [1, 1, 0]]

这不是就地记忆观点,但为了您的目的,它应该可以工作。


推荐阅读