2015-06-30 2 views
2

Предположим, у нас есть пара кортежей, где кортежи могут иметь разную длину. Давайте назовем их кортежи t1 и t2:Удалить определенные комбинации из itertools.combinations

t1 = ('A', 'B', 'C') 
t2 = ('d', 'e') 

Теперь вычислим все комбинации длины 2 из обоих кортежей с помощью itertools:

import itertools 
tuple(itertools.combinations(t1 + t2, 2)) 

Itertools генератор производит все возможные комбинации, но мне нужно только те, что происходит между кортежами; ожидаемый выход

(('A', 'd'), ('A', 'e'), ('B', 'd'), ('B', 'e'), ('C', 'd'), ('C', 'e')) 

Интересно, что лучше всего подходит для устранения нежелательной комбинации.

ответ

7

Вам нужно itertools.product:

>>> t1 = ('A', 'B', 'C') 
>>> t2 = ('d', 'e') 
>>> from itertools import product 
>>> 
>>> list(product(t1,t2)) 
[('A', 'd'), ('A', 'e'), ('B', 'd'), ('B', 'e'), ('C', 'd'), ('C', 'e')] 

Если вы имеете дело с коротких кортежей вы можете просто сделать эту работу с пониманием списка:

>>> [(i,j) for i in t1 for j in t2] 
[('A', 'd'), ('A', 'e'), ('B', 'd'), ('B', 'e'), ('C', 'd'), ('C', 'e')] 
Смежные вопросы