3

我正在使用 Python 中的列表进行操作。

In [52]: myList = [1,2,3,4,5]
In [54]: c=[[]]*10

In [55]: for i, elem1 in enumerate(myList):
   ....:     b = [elem1 + elem2 for elem2 in range(10)]
   ....:     minSum, minSumIndex= min((val, idx) for (idx, val) in enumerate(b))
   ....:     c[minSumIndex].append(elem1)

希望将所有元素myList附加到c[0],因为elem1+1总是给出最小的总和。

print c[0]
[1, 2, 3, 4, 5]

print c[1]
[]

print c[2]
[]

...

但是,我最终得到了这个:

In [56]: shape(c)
Out[56]: (10, 5)

In [57]: print c[0]
[1, 2, 3, 4, 5]

In [58]: print c[1]
[1, 2, 3, 4, 5]

In [59]: print c[2]
[1, 2, 3, 4, 5]

In [60]: print c[3]
[1, 2, 3, 4, 5]

In [61]: print c[4]
[1, 2, 3, 4, 5]

In [62]: print c[5]
[1, 2, 3, 4, 5]

哪里出错了?

4

2 回答 2

4

你困惑的根源就在这条线上

c=[[]]*10

在这里,您正在创建一个包含十个对同一(最初为空)列表的引用的列表。因此,当您c[0]稍后附加到列表时,您也将附加到c. 尝试

c = [ [] for _ in range(10) ]

这将创建一个新列表 10 十次,因此您不会遇到相同的引用问题。

于 2013-10-17T13:15:02.343 回答
0

中的列表c都是同一个对象。你至少需要做:

c = [[] for i in xrange(10)]
于 2013-10-17T13:17:15.457 回答