t=[[False]*2]*2
と入力すると、リスト[[False, False], [False, False]]
が得られます。しかし、t[0][0] = True
と入力するとt[1][0]
もTrue
に変わり、私には[[True, False], [True, False]]
が残っています。私は[[True, False], [False, False]]
がほしいと思う。 2番目の選択肢として、t=[[False]*2, [False]*2]
を割り当ててt[0][0] = True
を変更すると、私の望むものが得られますが([[True, False], [False, False]]
)、実際のリストはそれよりもはるかに大きいので、オプション2を使用しないでください。同様の問題であると考えましたリストをコピー対クローニングので、私が試したに: ([[False]*2])*2
Python:複製しないで複製リストを複製する方法
([False]*2)*2
[[False]*2][:]*2
t = [False]*2 t = t*2
list([False]*2)*2
list([[False]*2])*2
[list([False]*2)]*2
。これらのどれも働かなかった。パッケージをインポートせずにこれを行う方法はありますか?
もちろんです!私はどこにでもリストの理解を使用しましたが、ここでそれを使うのを忘れました。ところで、 'xrange'はPython 3では動作しません(ちょうど' range'です)。リストの理解なしにこれを行う方法はありませんか? –
@ P.Gordy itertools.repeat(val、numberoftimes)もありますが、リストの理解はより速くなります。そしてもしあなたが 'repeat'を入れ子にしたら、それは本当に醜いです。 – MSeifert
'[False for x in range(2)]'は実際には '[False] * 2'です。 2番目のものだけが 'for y in range(2)'を持つ必要があります。 –