我有以下列表:
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]之间没有共同的元素。
在这种情况下,集更易于使用:
[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看不到我)