Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从列表中删除元素时出现意外行为_Python_List_Count_Remove - Fatal编程技术网

在python中从列表中删除元素时出现意外行为

在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

我运行一个代码,计算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(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]