2017-08-22 4 views
0

Je suis à la recherche d'un itérateur qui prend en entrée plusieurs plages en python (ou par exemple des listes) et retourne toutes les combinaisons possibles pour celles-ci. De préférence dans un itérateur, il ne stocke pas toutes les combinaisons en mémoire. Je sais comment le coder moi-même, mais il me semble que c'est une fonction assez courante, donc je ne peux pas imaginer qu'elle n'existe pas déjà dans une bibliothèque. Ceci est essentiellement l'idée:Iterator pour plusieurs plages (listes, ensembles etc) en python

a = range(0,2) 
b = range(2,4) 

for i,j in someFunc(a,b): 
    print(i,j) 

Ce serait alors l'impression:

0 2 
0 3 
1 2 
1 3 

Cela peut ofcourse être réalisé par de multiples boucles:

for i in a: 
    for j in b: 
     print(i,j) 

Mais je suis à la recherche d'une fonction qui peut accepter des plages illimitées comme arguments. Cela semble être une fonction commune, mais je n'ai pas réussi à la trouver nulle part.

+1

Vous cherchez un * produit cartésien *. –

+1

Archivez le paquet 'itertools' de la bibliothèque standard. –

+0

@martijnPieters Merci, sachant que la bonne terminologie va m'aider aussi avec de futures questions. – user3053216

Répondre

1

Vous voulez itertools.product():

>>> from itertools import product 
>>> list(product(range(0, 2), range(2, 4))) 
[(0, 2), (0, 3), (1, 2), (1, 3)] 
1

itertools.product un produit catesian-t:

>>> from itertools import product 
>>> A = [1, 2 , 3 ] 
>>> B = [3, 5, 4 ] 
>>> product(A,B) 
<itertools.product object at 0x7f4428d75e10> 
>>> for i in product(A,B): 
...  print i 
... 
(1, 3) 
(1, 5) 
(1, 4) 
(2, 3) 
(2, 5) 
(2, 4) 
(3, 3) 
(3, 5) 
(3, 4) 
>>>