我试图在条件为真时从列表中删除项目,然后从列表的开始再次迭代。以下是我的代码:
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))
因此,例如,x
列表中的我的第一个项目是1,假设Z也为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,3,4,5]中从2重新启动循环,而是从第二个位置开始的循环。更新?谢谢!
您可以在 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
循环无法按照您期望它们的方式工作,更好的是,如果您可以使用 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]