我有一个问题,当我将1D列表多次作为行附加到2D列表时,对2D列表的后续更改会影响所有行。此线程(Python list confusion)清除了原因 - 基本上每行都是相同的子列表或对象,因此对该子列表的更改会更改2D列表中的每一行。但是,我不知道如何解决它。这是我的例子:
NumOfRows = 100
LanesToCheck = [0, 1, 2, 3]
Lanes = []
for j in range(0,NumOfRows):
Lanes.append(LanesToCheck)
LanesToCheck用于初始化每一行,我的想法是我的脚本用户可以在一个简单的代码位置更改这个1D列表,并用它初始化整个2D数组。我知道我可以使用:
Lanes.append([0, 1, 2, 3])
但我希望用户可以轻松访问此LanesToCheck常量。有没有办法使用这个1D数组初始化我的2D数组,每个行都是一个单独的实体?
答案 0 :(得分:2)
使用: -
Lanes = [LanesToCheck[:] for j in range(NumOfRows)]
# makes copy of `LanesToCheck` every time.
通过执行此操作,您可以将每一行用作单独的实体,
Lanes[0][0] = 11
如果您将11
插入第1行第1列,则其他行将保持不变。
输出中: -
[[11, 1, 2, 3], [0, 1, 2, 3], ...... and so on
答案 1 :(得分:-1)
Lanes = [0,1,2,3] * NumOfRows
非常pythonic - 但错误: - (
也许,如果你想明确表示你正在复制清单:
import copy
Lanes = [copy.deepcopy(LanesToCheck) for i in xrange(NumOfRows)]