我基本上需要的是检查列表中的每个元素,如果符合某些条件,我想将其从列表中删除。
举个例子吧
list=['a','b','c','d','e']
我基本上想写(原则上而不是我尝试实现的实际代码)
如果列表中的元素是 'b' 或 'c',则将其从列表中移除并取下一个元素。
但是
for s in list:
if s=='b' or s=='c':
list.remove(s)
失败是因为当“b”被移除时,循环将“d”而不是“c”作为下一个元素。那么有没有比将元素存储在单独的列表中然后删除它们更快的方法呢?
谢谢。
最佳答案
更简单的方法是使用列表的副本 - 可以使用从列表的“开头”延伸到列表的“结尾”的切片来完成,如下所示:
for s in list[:]:
if s=='b' or s=='c':
list.remove(s)
你已经考虑过了,这很简单,可以放在你的代码中,除非这个列表真的很大,而且在代码的关键部分(比如,在 Action 游戏的主循环中)。在那种情况下,我有时会使用以下成语:
to_remove = []
for index, s in enumerate(list):
if s == "b" or s == "c":
to_remove.append(index)
for index in reversed(to_remove):
del list[index]
当然,您可以改用 while 循环:
index = 0
while index < len(list):
if s == "b" or s == "c":
del list[index]
continue
index += 1
关于python - 如何从循环内正确修改python中循环的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544559/