python数组给定长度的所有组合

2021-10-17 13:57:47 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有:

a=[[1,2,3],['a','b'],[7,8,9],['c','d','e']]

我知道我应该用:

for t in itertools.product(*a):
    print t 

获取所有组合,例如

[(1,'a',7,'c'),(1,'a',7,'d')....]

但是,如果要设置元素的长度子序列,应该怎么做? 例如,我想要的结果是(如果我将3设置为长度):

[(1,'a',7),(1,'a','c')....]

都是长度为3的组合。你知道吗

2条回答
网友
1楼 ·

可以使用外循环获取a中3个子列表的所有组合,然后使用内循环生成这些子列表的笛卡尔积:

import itertools

a = [[1, 2, 3], ['a', 'b'], [7, 8, 9], ['c', 'd', 'e']]

for groups in itertools.combinations(a, 3):
    for t in itertools.product(*groups):
        print(t)

输出

(1, 'a', 7)
(1, 'a', 8)
(1, 'a', 9)
(1, 'b', 7)
(1, 'b', 8)
(1, 'b', 9)
(2, 'a', 7)
(2, 'a', 8)
(2, 'a', 9)
(2, 'b', 7)
(2, 'b', 8)
(2, 'b', 9)
(3, 'a', 7)
(3, 'a', 8)
(3, 'a', 9)
(3, 'b', 7)
(3, 'b', 8)
(3, 'b', 9)
(1, 'a', 'c')
(1, 'a', 'd')
(1, 'a', 'e')
(1, 'b', 'c')
(1, 'b', 'd')
(1, 'b', 'e')
(2, 'a', 'c')
(2, 'a', 'd')
(2, 'a', 'e')
(2, 'b', 'c')
(2, 'b', 'd')
(2, 'b', 'e')
(3, 'a', 'c')
(3, 'a', 'd')
(3, 'a', 'e')
(3, 'b', 'c')
(3, 'b', 'd')
(3, 'b', 'e')
(1, 7, 'c')
(1, 7, 'd')
(1, 7, 'e')
(1, 8, 'c')
(1, 8, 'd')
(1, 8, 'e')
(1, 9, 'c')
(1, 9, 'd')
(1, 9, 'e')
(2, 7, 'c')
(2, 7, 'd')
(2, 7, 'e')
(2, 8, 'c')
(2, 8, 'd')
(2, 8, 'e')
(2, 9, 'c')
(2, 9, 'd')
(2, 9, 'e')
(3, 7, 'c')
(3, 7, 'd')
(3, 7, 'e')
(3, 8, 'c')
(3, 8, 'd')
(3, 8, 'e')
(3, 9, 'c')
(3, 9, 'd')
(3, 9, 'e')
('a', 7, 'c')
('a', 7, 'd')
('a', 7, 'e')
('a', 8, 'c')
('a', 8, 'd')
('a', 8, 'e')
('a', 9, 'c')
('a', 9, 'd')
('a', 9, 'e')
('b', 7, 'c')
('b', 7, 'd')
('b', 7, 'e')
('b', 8, 'c')
('b', 8, 'd')
('b', 8, 'e')
('b', 9, 'c')
('b', 9, 'd')
('b', 9, 'e')
网友
2楼 ·

替换

for t in itertools.product(*a):

for t in itertools.product(*a, repeat=3):

更多细节请看the docs

相关问题