2017-11-21 24 views
0

条件が真であるときにリストから項目を削除しようとしていて、リストの最初からもう一度繰り返します。以下は、私のコードです:だから例えば、xリストの私の最初の項目は1であり、zもあると言うことができます リストから項目を条件付きで削除し、最初からPythonループまで繰り返します。

from random import randint 
x = [1,2,3,4,5] 

for item in x: 
    print("item is " + str(item)) 
    z = randint(1, 5) 
    print("z is " + str(z)) 
    if z == item: 
     x[:] = [item for item in x if item != z] 
     print("Remaining list is " + str(x)) 
    else: 
     print("Remaining list is " + str(x)) 

1. z == itemは、私の xリストは、(1)最初の項目を削除し、に更新されます場合には[2,3,4,5]。しかし、私は次のような出力が得られます。

item is 1 
z is 1 
Remaining list is [2, 3, 4, 5] 
item is 3 
z is 2 
Remaining list is [2, 3, 4, 5] 

の代わりに私の最近更新され、リスト内の2からループを再起動し、[2,3,4,5]、ループは私がどのように3である第二の位置から開始しますリストが更新されるたびに、最初からループを再開しますか? ありがとう!

+0

反復処理中にリストのサイズを変更すると、off-by-oneエラーが多数発生します。代わりに、新しいリストを作成し、ループの最後に古いリストを置き換えます。 –

答えて

1

forループの外側にwhileループを追加して、アイテムを削除するたびにforループを再開できます。

from random import randint 
x = [1,2,3,4,5] 

restart = True 

while restart: 
    restart = False 
    for item in x: 
     print("item is " + str(item)) 
     z = randint(1, 5) 
     print("z is " + str(z)) 
     if z == item: 
      x[:] = [item for item in x if item != z] 
      print("Remaining list is " + str(x)) 
      restart = True 
      break 
     else: 
      print("Remaining list is " + str(x)) 

# results 
item is 1 
z is 2 
Remaining list is [1, 2, 3, 4, 5] 
item is 2 
z is 2 
Remaining list is [1, 3, 4, 5] 
item is 1 
z is 1 
Remaining list is [3, 4, 5] 
item is 3 
z is 4 
Remaining list is [3, 4, 5] 
item is 4 
z is 3 
Remaining list is [3, 4, 5] 
item is 5 
z is 5 
Remaining list is [3, 4] 
item is 3 
z is 4 
Remaining list is [3, 4] 
item is 4 
z is 1 
Remaining list is [3, 4] 
+0

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

1

Forループ次のような条件のチェックでwhileを使用することができれば、より良いです、あなたは彼らがあることを期待しているように動作しません:

from random import randint 
    x = [1, 2, 3, 4, 5] 
    loops = 0 
    while loops<len(x): 
     item = x[loops] 
     print("item is " + str(item)) 
     z = randint(1, 5) 
     print("z is " + str(z)) 
     if z == item: 
      x[:] = [item for item in x if item != z] 
      print("Remaining list is " + str(x)) 
      continue 
     else: 
      print("Remaining list is " + str(x)) 
     loops += 1 

出力:

item is 1 
z is 1 
Remaining list is [2, 3, 4, 5] 
item is 2 
z is 2 
Remaining list is [3, 4, 5] 
item is 3 
z is 1 
Remaining list is [3, 4, 5] 
item is 4 
z is 2 
Remaining list is [3, 4, 5] 
item is 5 
z is 1 
Remaining list is [3, 4, 5] 
+0

あなたの答えをありがとう! – gibbz00

関連する問題