我是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-15 00:01:58
有几种方法可以创建一个由17个列表组成的列表,每个列表包含4个子列表。
最短的是
[[list() for i in range(4)] for j in range(17)] 如果您这样做,您的附加程序将按您希望的那样工作。
如果您熟悉C或Java等没有列表理解的语言,那么这种方式对您来说可能更熟悉:
l = []
for j in range (17):
k = []
for i in range (4):
k.append(list())
l.append (k)这也是可以接受的,但是对于许多蟒蛇头来说,理解列表更好。列表中的内容应该是表现方面的,至少和理解能力一样好。
发布于 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
复制相似问题