微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用值列表过滤迭代器

如何解决使用值列表过滤迭代器

我需要使用元素列表过滤 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
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。