2016-03-24 16 views

答えて

2

すべての要素がそのようにシフトしますので、あなたが継続的に"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の上にシフト挿入したとき、あなたはその下に見ることができます

あなたが挿入を行うたびに、リスト内のすべての要素を移動する必要があります。そのため、多くのマッチがある場合、多くの動きをします。

7

リストやディクショナリなどのコンテナを反復処理している間は、そのようなコンテナを変更しないでください。その周りに一つの方法は、反復のためコピーを作成することです:あなたのコードは永遠にループするのはなぜ

for letter in letters[:]: 
    if letter == 'c': 
     letters.insert(0, letter) 
+2

は同意、それを反復しながら、反復可能に変異させることはありません。これはPythonだけでなく、良いアドバイスです。 –

+0

またはそれを突然変異させた場合は、すぐにループを終了してください – Copperfield

+0

良い助言、ありがとう助けてください –

1

楽しみのためだけに、これを試してください:)

import time 
letter = ['a', 'b', 'c'] 

for letter in letters: 
    if letter == 'c': 
     letters.insert(0, letter) 
     print(letters) 
     time.sleep(1) 
関連する問題