使用值列表筛选迭代器

2024-05-31 23:49:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用元素列表过滤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', 'm2', 'm3', 'm4', 'm5']的所有组合的列表

我试着转换成这样的东西

if 'm1' in ('m1', 'm2', 'm4'):
...     print('ok')
... 
ok

进入这个

ms1 = list(filter(lambda x: 'm1' in x, comb)) // empty list
ms2 = list(filter(lambda x: ['m1', 'm2', 'm3', 'm4', 'm5'] in x, comb)) // empty list

我需要的是得到所有的组合


Tags: lambdain列表itemsokfilterlistm3
1条回答
网友
1楼 · 发布于 2024-05-31 23:49:13

假设您只想创建包含目标项列表(['m1', 'm2', 'm3', 'm4', 'm5'])中任何一个值的组合的列表,那么使用集合交集可能是合适的

例如:

from itertools import combinations 

items = ['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'b10', 'm1', 'm2', 'm3', 'm4', 'm5']
item_combinations = combinations(items, 3)

target_items = {'m1', 'm2', 'm3', 'm4', 'm5'}
target_item_combinations = [
    one_combination
    for one_combination in item_combinations
    if set(one_combination) & target_items
]

相关问题 更多 >