2012-04-18 58 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')] 
相关问题