[英]Conditional removal of items from list and iterate from beginning through Python loop
I am trying to remove items from my list when a condition is true and then iterate again from the very beginning of the list. 当条件为真时,我试图从列表中删除项目,然后从列表的开头再次进行迭代。 Following is my code: 以下是我的代码:
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))
So for example, my first item in the x
list is 1 and lets say z is also 1. When z == item
,my x
list removes the first item(1) and gets updated to [2,3,4,5]. 因此,例如,我在x
列表中的第一个项目是1,而z也是1。当z == item
,我的x
列表删除了第一个项目(1)并更新为[2,3,4,5] 。 But I get the following output: 但是我得到以下输出:
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]
Instead of restarting the loop from 2 in my recently updated list[2,3,4,5], the loop starts from the second position which is 3. How do I restart the loop from the very beginning everytime my list gets updated? 而不是从我最近更新的列表[2,3,4,5]中的2重新开始循环,而是从第二个位置3开始循环。如何在列表每次更新时从头开始重新开始循环? Thanks! 谢谢!
You can add a while
loop outside of your for
loop, and restart the for
loop whenever you remove an item. 您可以在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]
For
loops doesn't work the way you're expecting them to be, better is if you can use while
with conditional check like following : 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
Output : 输出:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.