我有这个列表 arr
包含 n 个空列表和另一个列表 indices
,整数范围从 0 到 n-1
n = 4
e = []
arr = [e]*(n)
indices = [0,2,3,0,2,1,3]
我想要做的是获取 i
中的每个元素 indices
并将一些变量附加到 arr
的第 i 个元素。代码如下
var = 1
for i in indices:
arr[i].append(var)
我期待 arr
的第一个列表中有两个元素,第二个列表中有一个元素,等等。但是,当我打印 arr
时,我得到以下内容
[[1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1]]
答案 0 :(得分:1)
尝试按如下方式更改第一个块:
n = 4
arr = [[] for i in range(n)]
indices = [0,2,3,0,2,1,3]
现在一切正常。
当您将 arr
定义为 arr = [e]*(n)
时,arr 中的每个列表都指向内存中的同一个位置(即 e
)。因此,更改 arr
中的一个元素将更改所有元素。但是当您将 arr 定义为 arr = [[] for i in range(n)]
时,该元素将是独立的。