2012-04-18 12 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 

私はその後、ワイルドカードの可能な値の全てを交換する必要がワイルドカードを含むことができる、要素のリストを受けています。私はワイルドカードの数をチェックして、その多くの要素の組み合わせを私のde-wildcardedリストに追加する必要があります。言い換えれば、iterable2はワイルドカードのすべての可能な値であり、mはワイルドカードの数であり、iterable1はすべてのワイルドカードが削除された元のリストであり、nは希望するアイテムの数より少ないmです。

+1

具体的な質問はありますか? – Attila

+0

iterable1のn個のアイテムとiterable2のm個のアイテムをどのように組み合わせるのですか? – tdrd

+0

itertools.productを試しましたが、要素が正しく結合されません。これはネストされたタプルで終わるためです。 – tdrd

答えて

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')] 
関連する問題