组合长度为n的列表的列表

13 浏览
0 Comments

组合长度为n的列表的列表

我有一个列表的列表

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

我想要获取列表中所有长度为2的可能组合

[ [1,4] ,[1,5], [1,6] , [1,7] , [1,8], [1,9] , [1,10] , [2,4], [2,5] 等等 ]

0
0 Comments

组合是数学中的一个概念,表示从给定的元素集合中选择若干个元素组成一个子集。在Python中,可以使用itertools模块中的combinations函数来实现组合的功能。

在给定一个列表的列表和一个整数n的情况下,需要找出列表的列表中所有长度为n的子列表的组合。可以使用itertools模块中的combinations和product函数来实现这个功能。

首先,需要导入itertools模块中的combinations、product、chain和starmap函数。然后,可以使用列表推导式来生成所有长度为n的子列表的组合。具体的实现代码如下所示:

from itertools import combinations, product, chain, starmap
[p for c in combinations(a, 2) for p in product(*c)]

上述代码中,a表示给定的列表的列表,2表示子列表的长度。通过combinations(a, 2)可以得到列表a中所有长度为2的子列表的组合。然后,通过product(*c)可以将每个子列表中的元素进行排列组合,得到所有可能的组合。最后,通过列表推导式将所有的组合生成一个列表。

除了使用列表推导式,还可以使用chain和starmap函数来实现相同的功能。具体的实现代码如下所示:

list(chain(*starmap(product, combinations(a, 2))))

上述代码中,使用starmap函数将combinations(a, 2)的结果作为product函数的参数,并使用chain函数将所有的组合连接成一个列表。

通过使用itertools模块中的combinations和product函数,可以方便地生成列表的列表中所有长度为n的子列表的组合。这样可以快速地解决类似的问题。

0