python - 列表之间的组合忽略和列表中的元素并忽略对的排序
问题描述
我有两个清单:
list1=['a', 'z', 'd', 'e','b']
list2=['d','e', 'b' ]
我需要这两个列表的元素的组合(而不是排列)。我试过itertools.combinations
and itertools.product
,但我没有得到我想要的。例如,('d','d')
将是错误的。('a','z')
也将是错误的,因为'a'
和'z'
属于同一个列表 ( list1
) 并且它们都没有出现在list2
. 最后,我不想要两者('d','e')
和('e','d')
- 只想要其中一对,因为顺序无关紧要。理想的输出是:
('a','d'), ('a','e'), ('a','b'),
('z','d'), ('z','e'), ('z','b'),
('d','e'), ('d','b'), ('e','b')
编辑:通常,list2
并不总是 的子集list1
,但我也想处理这种情况。这两个列表也可能重叠,而不是完整的子集。
解决方案
由于顺序无关紧要,您应该使用set
orfrozenset
用于与顺序无关的集合。
一种蛮力解决方案是使用itertools.product
, 但set
与列表推导结合使用以删除重复项:
from itertools import product
list1=['a', 'z', 'd', 'e','b']
list2=['d','e', 'b' ]
res = [i for i in set(map(frozenset, product(list1, list2))) if len(i) > 1]
print(res)
[frozenset({'b', 'e'}),
frozenset({'a', 'e'}),
frozenset({'d', 'z'}),
frozenset({'b', 'd'}),
frozenset({'a', 'd'}),
frozenset({'d', 'e'}),
frozenset({'b', 'z'}),
frozenset({'a', 'b'}),
frozenset({'e', 'z'})]
推荐阅读
- python - 如何删除重复行并获取列中 3 个最受欢迎元素的百分比值?
- php - Laravel - 从数据库中获取 3 列并以 SELECT 形式打印的方法
- python - Python代码从列表中删除部分单词
- c - UART通信 SMT32L496ZG
- sql - 从多个列/表中选择数据并将其插入到视图中的一列中
- c++ - 派生的获取/设置方法
- javascript - jQuery .load() 全局应用注入的 HTML 页面的 CSS。有没有办法避免这种行为?
- java - 如何确定运行 java 应用程序的帐户是否为“SYSTEM”
- r - 使用 shinycustomloader 的 withLoader() 动态创建加载消息
- keras - 如何解决tensorflow 2.2.0中的CNN模型拟合问题?