如何获得列表列表中可能的对的列表-python

如何获得列表列表中可能的对的列表-python,python,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)) 但我得到了第一个和第二个的组合。感谢您的帮助如果您正在寻找使用标准库的解决方案,这将使用列表理解来调用每个子列表上的itertools.compositions from itertools import combinat

我有以下清单

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))

但我得到了第一个和第二个的组合。感谢您的帮助

如果您正在寻找使用标准库的解决方案,这将使用列表理解来调用每个子列表上的
itertools.compositions

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)]

我认为这给出了一个元组列表,而不是listsb=list(itertools.product(*a))的列表,给出了第一个列表和第二个列表的组合。您可以使用itertools.chain来避免嵌套comprehension@coldspeed我在想这样的事情:
list(chain(*(a中l的组合(l,r=2)))
只是为了避免嵌套理解。单一的理解是可读的IMO@Tryph我想这是另一种选择,尽管我通常不喜欢混合函数式编程和理解语法。@Luis如果答案有用,麻烦您单击答案左侧的灰色复选框将其变为绿色。谢谢