2016-09-15 5 views
1

リストにリストとインデックスを作成して追加しようとしています。任意のリスト要素を追加すると、自動的に リストをリストのリストに追加すると、すべてのサブリストが変更されます

sygma_list [[]] * 3 

を以下のように、このリストのすべての まず私がリストを持っているで利用可能なすべてのリストに追加し、私がループすると、別のリストは、フォーム

mts_columns1 = [[1,2,3], [4,5,6], [6,7,8]] 
mts_columns2 = [[1,2,3], [4,5,6], [6,7,8]] 

を持っていていますsygma_list上私は同様に持っている:sygma_listの

for i in range(0, 3): 
     sygma_list[i].append(mts_column[i]) 

結果は、Lの各要素に対して動作している)(追記として、非常に衝撃的であるれていますイスト代わり

sygma_list = [[[1,2,3], [1,2,3]], 
       [[4,5,6],[4,5,6]], 
       [[6,7,8],[6,7,8]]] 

答えて

5

あなたのコードの最大の漁獲量の最終結果を得るこれがある:あなたがこれを行うと:

sygma_list = [[]] * 3 

あなたは同じリストの参照のサイズ-3の配列を作成します。あなたは、一般的に必要と確かにここに

ことは、代わりにこれをしない:

意志
sygma_list = [list() for x in range(3)] 

を3つの異なるリストを作成します。

(この構築物は[0] * 3または[ "foo" という]のような不変オブジェクトのためにOKです* 4)

はのは、この固定されたコードを考えてみましょう:

sygma_list = [list() for _ in range(3)] 

mts_column = [[1,2,3], [4,5,6], [6,7,8]] 

for i in range(0, 3): 
    sygma_list[i].append(mts_column[i]) 

print(sygma_list) 

利回り:

[[[1, 2, 3]], [[4, 5, 6]], [[6, 7, 8]]] 
ところで

:あなたはあなたのリストを追加または拡張したい場合は(それを平らかどうか)わからない

sygma_list[i].extend(mts_column[i]) 

リストのリストを作成する代わりに、リストのリストを作成する

+0

なぜこれがダウン投票されるのですか? – Tobias

+0

それは、「驚くべき」結果が何であるかについての質問が明確ではなく、混乱につながるからです。私は別の期待される結果を得る。私は自分の投稿を編集しました。内部リスト配列の複製が主なポイントです。 –

+0

私はあなたの答えが最初に投票されたことを意味しました。 – Tobias

関連する問題