colours = ["red"]
for i in colours[:]:
if i == "red":
colours += ["black"]
if i == "black":
colours += ["white"]
print colours
Now the output looks like this:
['red', 'black']
我々はまだ持っているかもしれません何かをした、私たちがしてはいけないこと。リストの色を変更しましたが、私たちの変更はもはやループに何の影響も与えませんでした。ループされる要素は、反復の間は同じままです。
ので:
colours = ["red"]
for i in colours[:]: # iterates over a copy so we only evaluate what is in the list originally
if i == "red":
colours += ["black"]
if i == "black":
colours += ["white"]
print(colours) # ["red", "black"]
は今何のコピー:
colours = ["red"]
for i in colours:
if i == "red":
colours += ["black"] # black gets added, colours -> ["red", "black"]
if i == "black": # now because of ^^, white gets added.
colours += ["white"]
print(colours) # -> ['red', 'black', 'white']
今でも最悪の場合:
colours = ["red"]
for i in colours:
if i == "red":
colours += ["red"] # red gets add, colours = ["red", "red"]
# 2nd iteration, red gets added, colours -> colours = ["red", "red", "red"]
# infinite loop....
if i == "black":
colours += ["white"]
print(colours)
何をやっているが、例が何であるかを完全に違いはありません表示しようとしているので、それを反復しているリストに要素を追加しないようにしようとしています新しく追加された要素ではなく元のリストから要素を評価するだけです。またappend
ない+=
colours = ["red"]
new = colours[:] # assign new list/copy to a name.
for i in colours:
if i == "red":
new += ["red"] # add to new list
if i == "black":
new += ["white"]
print(colours)
する必要があります:あなたは、新しいリストを作成しようとしている
colours = ["red"]
new = colours[:]
for i in colours:
if i == "red":
new.append("red")
if i == "black":
new.append("white")
print(colours)
はいあなたはまだ元のリストに追加しています。ループして追加する前に新しいコピーを作成してください。 –
あなたがしようとしているものとまったく異なるので、完全なコードを追加してください。 –