python - 如何在不复制的情况下更改列表列表?
问题描述
我有一个在列表列表中给出的矩阵:
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
这应该可以工作,但由于某种原因我的程序出错了。任何帮助,将不胜感激
解决方案
你可以就地做,但由于它改变了董事会的整个结构(子列表的数量等),恕我直言,它没有多大意义,而且看起来有点不自然。如果唯一的问题是您有其他引用指向同一个板,您可以分配给切片以用新板board[:]
覆盖所有内容,而无需为其本身分配新值。board
board
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]]
这不是就地记忆观点,但为了您的目的,它应该可以工作。
推荐阅读
- javascript - 如何在不重新加载 HTML 页面的情况下重定向锚标记链接?
- html - HTML5 画布:如何查询或修改底层位图尺寸而不是 DOM 元素尺寸?
- scala - 如何仅从地图中提取值
- c++ - AVX512非法指令
- treeview - Aggrid-treeGrid:错误:没有为 DetailPanelComponent 找到组件工厂
- java - 如何从图像表示构造二叉树?
- angular - 如何正确编写服务并将图像上传到 Angular 2?
- jquery - 带有 svg 的对象只能在它周围点击
- python - ValueError:无法从 python 2.7 中的形状广播输入数组
- ios - Swift 处理 Tableview Cell 中的播放/暂停按钮