我正在使用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]
出了什么问题?
答案 0 :(得分:4)
你的困惑的根源在这一行
c=[[]]*10
在这里,您要创建一个列表,其中列出了对同一个(最初为空)列表的十个引用。因此,当您稍后追加到c[0]
中的列表时,您还会附加到c
中的每个其他列表。尝试
c = [ [] for _ in range(10) ]
这将创建10个新列表十次,因此您将不会有相同的引用问题。
答案 1 :(得分:0)
c
中的列表都是相同的对象。
你至少需要这样做:
c = [[] for i in xrange(10)]