2012-04-18 70 views
0

如何將iterable1中的n個項與iterable2中的m項組合起來?將iterable1的n個元素與iterable2的m個元素相結合

iterable1 = [0,1,2,3,4] 
iterable2 = ['a','b','c'] 
BlackBox(itertools.combination(iterable1, 2),itertools.combination(iterable2, 1)) yields 
(0,1,'a'), (0,1,'b'), (0,1,'c'), (0,2,'a'), (0,3,'a'), etc. Order doesn't matter 

我收到元素的列表,其可以包含一個通配符,然後我需要與所有的通配符的可能值來代替。我檢查通配符的數量,並且需要將這些許多元素的組合添加到我的去通配列表中。換句話說,iterable2是通配符的所有可能值,m是通配符的數量,iterable1是刪除所有通配符的原始列表,n是所需項目的數量減去m。

+1

您的具體問題是什麼? – Attila 2012-04-18 02:19:28

+0

我如何將iterable1中的n個項目與iterable2中的m項目結合起來? – tdrd 2012-04-18 02:20:56

+0

我試過itertools.product,但它沒有正確地結合這些元素,因爲我最終得到了嵌套元組。 – tdrd 2012-04-18 02:26:26

回答

1
>>> iterable1 = [0,1,2,3,4] 
>>> iterable2 = ['a','b','c'] 
>>> import itertools as it 
>>> list(x+y for x,y in it.product(it.combinations(iterable1, 2), it.combinations(iterable2, 1))) 
[(0, 1, 'a'), (0, 1, 'b'), (0, 1, 'c'), (0, 2, 'a'), (0, 2, 'b'), (0, 2, 'c'), (0, 3, 'a'), (0, 3, 'b'), (0, 3, 'c'), (0, 4, 'a'), (0, 4, 'b'), (0, 4, 'c'), (1, 2, 'a'), (1, 2, 'b'), (1, 2, 'c'), (1, 3, 'a'), (1, 3, 'b'), (1, 3, 'c'), (1, 4, 'a'), (1, 4, 'b'), (1, 4, 'c'), (2, 3, 'a'), (2, 3, 'b'), (2, 3, 'c'), (2, 4, 'a'), (2, 4, 'b'), (2, 4, 'c'), (3, 4, 'a'), (3, 4, 'b'), (3, 4, 'c')] 
相關問題