2016-08-11 3 views
0

入れ子リストにある特定のアイテムを変更しようとすると問題が発生しました。私が書いたコードはPython 2.7です。 これは私が書いたものです:Pythonでリストを変更するときのエラー

[[25タプル]、[25個のタプル]、[25タプル:

list_1 = [] 
list_2 = [] 
infin = 25 
while infin != 0: 
    list_1.append((0,0,0)) 
    infin = infin - 1 
infin = 5 
while infin != 0: 
    list_2.append(list_1) 
    infin = infin - 1 

を基本的にはこのようになりますリストを作成]、[25タプル]、[25タプル]

私はこれを行うことで、リストを変更しようとすると

はその後:

list_2[0][0] = (1,1,1) 

その中に25組で一つ一つのリストは単に最初のない、開始時に(1,1,1)があります。どうして?

答えて

1

実際にはリストの別のインスタンスを追加するのではなく、同じリストへの参照を繰り返し追加しています。リストを使用してこれを避ける。

list_1 = [] 
list_2 = [] 
infin = 25 
while infin != 0: 
    list_1.append((0,0,0)) 
    infin = infin - 1 
infin = 5 
while infin != 0: 
    list_2.append(list(list_1)) 
    infin = infin - 1 
2

同じリストlist_1を5回追加しているためです。リストが5回追加されたため、list_1で変更された内容は5回印刷されます。 新しいリストをしたい場合は、使用:

list(list_1) 
1

list_1がオブジェクトです。オブジェクトを別のリストに5回追加します。オブジェクトのコピーは5つではなく、同じオブジェクトへの参照が5つ作成されます。

あなたは第二のリストを作成すると、リストをコピーする必要があります。

infin = 5 
while infin != 0: 
    list_2.append(list(list_1)) 
    infin = infin - 1 
関連する問題