我是Python的新手,为了满足某些需要,我正在努力弄清楚如何处理列表列表。
我在做什么:
segment_coef = [[list()]*4]*17
print segment_coef
segment_coef[0][0].append(1)
segment_coef[1][0].append(2)
segment_coef[2][0].append(3)
print segment_coef在第一次print之后,我有:
[ [ [],[],[],[] ] , ... 14 more time ... , [ [],[],[],[] ] ]在这三个append命令之后,我想要有以下内容:
[ [ [1],[],[],[] ] , [ [2],[],[],[] ], [ [3],[],[],[] ] ]但我有:
[ [ [1,2,3],[1,2,3],[1,2,3],[1,2,3] ] , [ [1,2,3],[1,2,3],[1,2,3],[1,2,3] ], ... up to the end ]我做错了什么?
发布于 2014-12-14 23:58:11
Python使用相同的列表4次,然后它使用相同的列表4列表17次!
这里的问题是python列表都是可变的,并且您正在多次使用(引用)相同的列表。因此,当您修改列表时,所有对该列表的引用都显示了不同之处。
取决于如何/从何处获取数据,取决于修复数据的最佳方法,但类似的情况如下:
lols = []
for i in range(17):
lols.append([1,2,3,4])
# lols is not a list of 17 lists, each list contains the same data but they are different lists
lols[0][0] = 99
# Now only the first element from the first list is updated.要明确的是,问题来自于执行[list() * 4],它构造列表(使用list),然后重复4次。如果你做了[list(), list()m list(), list()],你会得到4个不同的(但都是空的)列表,或者,更简单地说,是[list() for _ in range(4)]或者只是[[] for _ in range(4)]
https://stackoverflow.com/questions/27475539
复制相似问题