przeczytać ten http://docs.python.org/2/library/itertools.html#itertools.product, to wszystko wyjaśnia.
itertools
to pakiet zawierający szereg przydatnych funkcji do iterowania po kolekcjach. Jedną z przydatnych funkcji jest funkcja product
, która tworzy generator, który będzie iterować nad iloczynem kartezjańskim dowolnej liczby zbiorów iteracyjnych, które mu dasz.
Wynik itertools.product
nie jest listą, jest to generator. Generator python jest podobny do coroutine w innych językach. Oznacza to, że oblicza kombinacje w zależności od potrzeb. Jeśli obliczysz iloczyn trzech iteracji, z których każdy ma rozmiar 100, ale użyjesz tylko pierwszych 10, itertools.product
oblicza tylko 10 kombinacji zamiast obliczać wszystkie kombinacje 100^3.
Jeśli rzeczywiście chcesz obiekt listy zamiast generatora (może chcesz obliczyć plasterki lub coś podobnego), wywołaj funkcję list
i przekazuj obiekt generatora jako argument.
Poniższy kod generuje wszystkie kombinacje i drukuje wyniki.
Kod:
import itertools
uk_rock_stars=[1,2,3,4,5,6,7,8,9]
uk_pop_stars=[10,11,12,13,1,4,6,22,81]
us_stars=[22,34,44,7,33,99,22,77,99]
for combination in itertools.product(uk_rock_stars, uk_pop_stars, us_stars):
print combination
Wyjścia:
(1, 10, 22)
(1, 10, 34)
(1, 10, 44)
(1, 10, 7)
(1, 10, 33)
(1, 10, 99)
(1, 10, 22)
(1, 10, 77)
(1, 10, 99)
(1, 11, 22)
(1, 11, 34)
(1, 11, 44)
(1, 11, 7)
(1, 11, 33)
(1, 11, 99)
(1, 11, 22)
(1, 11, 77)
(1, 11, 99)
...
etc.
itertools i podobne artykuły: http://docs.python.org/2/library/itertools.html?highlight= itertools # itertools.product – squiguy