如何在列表列表中获取可能的配对列表-python

时间:2019-03-15 12:54:10

标签: python

我有以下列表列表

a = [[1,2,3],[4,5,6,7]]

试图获得以下结果

b = [[1,2],[1,3],[2,3],[4,5],[4,6],[4,7],[5,6],[5,7],[6,7]]

我尝试使用

b = list(itertools.product(a))

但是我得到了第一个和第二个的结合。感谢任何帮助

1 个答案:

答案 0 :(得分:2)

如果您正在寻找使用标准库的解决方案,则使用列表推导在每个子列表上调用itertools.combinations

from itertools import combinations
b = [list(c) for l in a for c in combinations(l, r=2)]
b
# [[1, 2], [1, 3], [2, 3], [4, 5], [4, 6], [4, 7], [5, 6], [5, 7], [6, 7]]

另一种非常实用的计算方法是使用map;这将返回一个元组列表。

from itertools import chain, combinations
from functools import partial

fn = partial(combinations, r=2)
b = list(chain.from_iterable(map(fn, a))) 
b 
# [(1, 2), (1, 3), (2, 3), (4, 5), (4, 6), (4, 7), (5, 6), (5, 7), (6, 7)]