如果应该存在一个公共元素,如何查找列表中给出的所有可能组合?

问题描述 投票:-1回答:1

我有以下列表:

l3=[['a','b'],['a','e'],['e','g'],['f','h']]

我可以使用列表轻松生成3个元素的所有组合

但是现在我想找到所有列表之间的组合,它们之间有一个共同的元素。例如:一个可能的结果可能是['a','e','b'](因为在列表[a,b]和[a,e]之间;存在共同的元素'a')但是,不允许使用[a,e,f,h]之类的任何组合,因为列表[a.e]和[f,h]之间没有共同的元素。

python list combinations itertools
1个回答
0
投票

在这种情况下,集更易于使用:

[list(a | b) for a, b in itertools.combinations(map(set, l3), 2) if a & b]
# => [['a', 'b', 'e'], ['a', 'e', 'g']]

将每个子列表变成一个集合,然后使用combinations将每个集合彼此匹配。如果有一个非空的交集,则产生两个集合的并集(作为列表,所以使用set magic:P看不到我)

© www.soinside.com 2019 - 2024. All rights reserved.