Itertools 多个列表的组合,每个列表选择 n 个元素

Pul*_*se9 1 python combinations python-itertools

我需要组合一个列表列表,例如在每个列表中选择 n 个元素

a=[[1,2,3,4,5],[6,7,8,9,10]]
n1=2
n2=3
Run Code Online (Sandbox Code Playgroud)

所以我的结果可能是这样的:

r=[[1,2,6,7,8],[1,2,6,7,9],...,[4,5,7,8,9],[4,5,8,9,10]]
Run Code Online (Sandbox Code Playgroud)

有什么干净的方法可以做到吗?或者我应该将列表分成更小的大小并使用 for 循环来调用 itertools?

Bri*_*ian 5

只需分别生成两个列表的组合,然后取两个生成器的笛卡尔积:

from itertools import product, combinations

r_gen  = product(combinations(a[0], n1), combinations(a[1], n2))                             

r = (a + b for a, b in r_gen)
Run Code Online (Sandbox Code Playgroud)

产生的前 10 个元素r

[(1, 2, 6, 7, 8),
 (1, 2, 6, 7, 9),
 (1, 2, 6, 7, 10),
 (1, 2, 6, 8, 9),
 (1, 2, 6, 8, 10),
 (1, 2, 6, 9, 10),
 (1, 2, 7, 8, 9),
 (1, 2, 7, 8, 10),
 (1, 2, 7, 9, 10),
 (1, 2, 8, 9, 10)]
Run Code Online (Sandbox Code Playgroud)