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)

のすべての要素がに追加されることを期待しています。これは、常に最小の合計が得られるためです。myListc[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

ここでは、同じ (最初は空の) リストへの 10 個の参照のリストを作成しています。したがって、c[0]後で のリストに追加すると、 の他のすべてのリストにも追加されcます。試す

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

これにより、新しいリスト 10 が 10 回作成されるため、同じ参照の問題は発生しません。

于 2013-10-17T13:15:02.343 に答える