はリストがあります:letters = ['a', 'b', 'c']
を、私は、リストの最初に'c'
を挿入したい:私はエンターキーを押したときforループで選択した項目を複製できないのはなぜですか?私のように
for letter in letters:
if letter == 'c':
letters.insert(0, letter)
何も起こらなかっそこだと私は...私の端末を強制終了する必要が
はリストがあります:letters = ['a', 'b', 'c']
を、私は、リストの最初に'c'
を挿入したい:私はエンターキーを押したときforループで選択した項目を複製できないのはなぜですか?私のように
for letter in letters:
if letter == 'c':
letters.insert(0, letter)
何も起こらなかっそこだと私は...私の端末を強制終了する必要が
すべての要素がそのようにシフトしますので、あなたが継続的に"c"
を見つけて、無限ループを打つ開始時に要素を挿入しておくと、
letters = ['a', 'b', 'c']
cn = letters.count("c")
letters = ["c"] * letters.count("c") + letters
print(letters)
:
["a","b","c"] # 3rd iteration at "c" c == c insert new c
0, 1 , 2
["c","a","b","c"] # 4th at "c" again c == c insert new c
0, 1, 2 , 3
["c","c","a","b","c"] # 5th at "c" again! c == c insert new c ....
0, 1, 2 , 3, 4
は、迅速かつ安全な方法は、発生をカウントして、新しいリストを作成することです:あなたはすべての要素が1の上にシフト挿入したとき、あなたはその下に見ることができます
あなたが挿入を行うたびに、リスト内のすべての要素を移動する必要があります。そのため、多くのマッチがある場合、多くの動きをします。
リストやディクショナリなどのコンテナを反復処理している間は、そのようなコンテナを変更しないでください。その周りに一つの方法は、反復のためコピーを作成することです:あなたのコードは永遠にループするのはなぜ
for letter in letters[:]:
if letter == 'c':
letters.insert(0, letter)
楽しみのためだけに、これを試してください:)
import time
letter = ['a', 'b', 'c']
for letter in letters:
if letter == 'c':
letters.insert(0, letter)
print(letters)
time.sleep(1)
は同意、それを反復しながら、反復可能に変異させることはありません。これはPythonだけでなく、良いアドバイスです。 –
またはそれを突然変異させた場合は、すぐにループを終了してください – Copperfield
良い助言、ありがとう助けてください –