2016-05-22 3 views
-1

私は言葉のはしごのような問題を抱えています。 元々、私は文字列リスト:paths = [[A]]を持っています。 は今B、C及びDは、一つだけ違うの手紙を持っているすべての文字列は、私が何をしたいどのようなA.に を比較しているリストを複製して別の方法で操作するには?

[[A]] with [B,C,D] -> paths = [[A,B], [A,C], [A,D]] 

を作ることです。しかし、私は[[A]]スリーをコピーする場合paths = [paths[0]]*3を使用してpaths = [[A], [A], [A]] を準備するtames

i=0 
for word in [B,C,D]: 
    newpath = paths[i] 
    paths.append(newpath.append(word)) 
    i += 1 

[[A, B, C, D], [A, B, C, D], [A, B, C, D]]を示しています。それは各コピーで同じ操作と思われます。私がpaths = [paths[0] for i in range(3)]を使用したとしても、それは同じです。どうすればそれを避けることができますか?私のコードに何が問題なのですか?

ありがとうございました!

+0

可能な複製(http://stackoverflow.com/questions/ [リストのPythonのリストを、変更が予期せずにサブリストに反映しました] 240178/python-list-of-lists-changes-across-sublists-unexpectedly) – miradulo

+0

私はこの方法を試しました。私は "paths = [paths(0)for range(3)]"を試みました。 – Hsiang

答えて

1

paths = [paths[0] for i in range(3)]では、paths[0]はまだ1つの同じリストへの参照です。おそらくpaths = [paths[0].copy() for i in range(3)]が必要です。

あなたはそれがどのように動作するか確認するためにpythontutor visualizationに次のコードを置くことができますの

paths = [['A']] 
paths = [paths[0] for i in range(3)] 
otherpaths = [['A']] 
otherpaths = [otherpaths[0].copy() for i in range(3)] 
+0

ありがとうございました。 – Hsiang

関連する問題