问题描述
我需要使用元素列表过滤 itertool.combinations
对象。
这是迭代器:
from itertools import combinations
items = ['b1','b2','b3','b4','b5','b6','b7','b8','b9','b10','m1','m2','m3','m4','m5']
comb = combinations(items,3)
现在,我可以用
打印组合列表for i in comb:
print(i)
我需要的是一个包含 ['m1','m5']
所涉及的所有组合的列表。
我试图转换这样的东西
if 'm1' in ('m1','m4'):
... print('ok')
...
ok
进入这个
ms1 = list(filter(lambda x: 'm1' in x,comb)) // empty list
ms2 = list(filter(lambda x: ['m1','m5'] in x,comb)) // empty list
我需要的是获得所有组合
解决方法
假设您只想创建包含目标项目列表 (['m1','m2','m3','m4','m5']
) 中任何一个值的那些组合的列表,那么使用集合交集可能是合适的。
示例:
from itertools import combinations
items = ['b1','b2','b3','b4','b5','b6','b7','b8','b9','b10','m1','m5']
item_combinations = combinations(items,3)
target_items = {'m1','m5'}
target_item_combinations = [
one_combination
for one_combination in item_combinations
if set(one_combination) & target_items
]