2017-08-08 79 views
2

如果我有:蟒蛇 - 所有一陣列的給定長度的組合

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.

回答

3

您可以通過使用外循環得到的3子列表所有組合中a做到這一點,那麼內循環產生的子表的笛卡爾積:

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

所有組合替換

for t in itertools.product(*a): 

隨着

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

並查看the docs瞭解更多詳情

+1

這使我3重複的組合的全長如: [(1, '一個',7, 'C',1, '一個',7, 'C',1, 'A' ,7,'c'),....] – dPdms

+1

它沒有做什麼在提問 –

+0

@dPdms道歉,我會編輯答案 –