在python中从列表中删除元素时出现意外行为
我运行一个代码,计算9个元素列表中字符在python中从列表中删除元素时出现意外行为,python,list,count,remove,Python,List,Count,Remove,我运行一个代码,计算9个元素列表中字符-、x和o的所有组合。 我想从列表中删除所有出现次数超过5次的o元素 我不明白为什么以下代码不起作用: from itertools import product combos = list(product(['-', 'x', 'o'], repeat=9)) print(combos[-1]) for element in combos: if element.count('o') > 5: combos.remove
-
、x
和o
的所有组合。
我想从列表中删除所有出现次数超过5次的o
元素
我不明白为什么以下代码不起作用:
from itertools import product
combos = list(product(['-', 'x', 'o'], repeat=9))
print(combos[-1])
for element in combos:
if element.count('o') > 5:
combos.remove(element)
print(combos[-1])
第一条打印指令打印('o','o','o','o','o','o','o','o','o')
第二个还打印('o','o','o','o','o','o','o','o','o')
,这意味着该元素尚未删除。为什么?
请注意,如果将repeat=8
指定为product()
的参数,则for循环中的代码不会发生任何更改
或repeat=6
('o', 'o', 'o', 'o', 'o', 'o')
('o', 'o', 'o', 'o', 'o', 'x')
Process finished with exit code 0
但不适用于repeat=7
('o', 'o', 'o', 'o', 'o', 'o', 'o')
('o', 'o', 'o', 'o', 'o', 'o', 'o')
Process finished with exit code 0
如果重复=9,则为nor
('o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o')
('o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o')
Process finished with exit code 0
这是我感兴趣的案例
还要注意的是,在最后一种情况下,元素('o','o','o','o','o','-','-')
,('o','o','o','o','o','o','o','o','o','o','o','o','o'-')
,它们共享类似的结构,但出现了6、7和8次o
,仍然在列表中,但不是结构类似于('o','o','o','o','o','-','o','o','-')
的元素,因为它们预期不应该这样做
为什么会这样
我做错了什么?在迭代列表时,不能从列表中删除元素
您可能只想在创建列表时执行筛选
combos = [element for elements in product(['-', 'x', 'o'], repeat=9)
if element.count('o') <= 5]
combos=[element for elements for product(['-','x','o'],repeat=9)
if element.count('o')非常优雅的解决方案。谢谢。第一条语句并不完全正确。我以前的代码删除了一些元素,所以这应该是可能的。我在这篇文章中找到了这种奇怪行为的原因。
combos = [element for elements in product(['-', 'x', 'o'], repeat=9)
if element.count('o') <= 5]