如何解决意外行为从python中的列表中删除了元素
我运行了一个代码,该代码计算9个元素的列表中字符-
,x
和o
的所有组合。
我想从列表中删除所有出现o
超过5次的元素。
我不明白为什么以下代码不起作用:
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')
,表示该元素尚未删除。为什么?
请注意,如果将repeat=8
指定为product()
的参数,则for循环中的代码将保持不变,
('o','o')
('o','x')
Process finished with exit code 0
或repeat=6
('o','x')
Process finished with exit code 0
但不包含repeat=7
,
('o','o')
Process finished with exit code 0
也不与repeat=9
,
('o','o')
Process finished with exit code 0
我很感兴趣。
还请注意,在最后一种情况下,元素('o','-','-')
,('o','-')
和('o','-')
具有相似的结构,但是出现o
的次数为6、7和8仍在列表中,但结构类似于('o','-')
的元素没有出现,因为它们应该不会出现。
为什么会这样?
我在做什么错了?
解决方法
您无法在列表上进行迭代时删除列表中的元素。
您可能只想在首先创建列表时执行过滤。
combos = [element for elements in product(['-','x','o'],repeat=9)
if element.count('o') <= 5]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。