给定一个列表l
和列表元素的所有组合,是否有可能在迭代所有组合的同时删除任何包含x
的组合,这样一来,在删除包含x
的组合时,您绝不会考虑该组合吗?
for a, b in itertools.combinations(l, 2):
if some_function(a,b):
remove_any_tup_with_a_or_b(a, b)
我的列表
l
很大,所以我不想将组合保留在内存中。 最佳答案
实现此目的的一个便宜技巧是使用动态更新的排除值set
通过不相交测试进行过滤,但实际上并不能避免生成您希望排除的组合,因此这并不是主要的性能优势(尽管filter工作推送到C层,使用像isdisjoint
这样的C内置函数通常比使用if
语句的Python级别continue
检查要快):
from future_builtins import filter # Only on Py2, for generator based filter
import itertools
blacklist = set()
for a, b in filter(blacklist.isdisjoint, itertools.combinations(l, 2)):
if some_function(a,b):
blacklist.update((a, b))
关于python - 在迭代时从itertools.combinations中删除元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39240242/