2016-11-22 9 views
0

同じリストを別のリストに複数回追加してから、そのうちの1つだけを変更する必要があります。 私は別のリストに同じリストを追加する

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b) 

を試みたが、問題は、私は

list_a[0][0] = 1 

をしようとした場合、それはまたlist_a[1][0]list_a[2][0]を変更することです。 どうすればそれを避けることができますか?

+2

'list_a.appendのような(list_bの[:])' - のコピーを追加し '元のの代わりにlist_b' – khelwood

+0

本当にありがとう! @khelwood –

+0

「同じリストを別のものに複数回追加する必要があります」 - そして今度は、同じリストを複数回追加していくことが問題です。同じものを再利用するのではなく、複数のリストを作成する必要があります。 – user2357112

答えて

0

は、次を使用します。あなたが望むすべてがすべて0秒で空のリストを作成することであるならば、このようなリストを作成する

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b[:]) 
1

良い方法は次のとおりです。

my_list = [[0]*3 for _ in range(3)] 

は、のかどうか、結果を検証してみましょう同じ問題があるかどうか:

>>> my_list 
[[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
>>> my_list[0][0] = 1 
>>> my_list 
[[1, 0, 0], [0, 0, 0], [0, 0, 0]] 
#^  ^  ^
# Yipee! value changed only once 

コードが偽でない理由を知りたいrking、check:Python list of lists, changes reflected across sublists unexpectedly

0

list_bを3回追加するので、実際にlist_bオブジェクトを変更しています。何がやりたいことは浅いコピーを作ることです、これはこの

list_a.append(list(list_b)) 

のように行われるか、またはこの

list_a.append(list_b[:]) 
関連する問題