将列表附加到另一个Python列表中

时间:2014-11-18 09:25:05

标签: python arrays list

我有一个问题,当我将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数组,每个行都是一个单独的实体?

2 个答案:

答案 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)]