2011-08-23 15 views
7

chcę zrobić coś jakZagnieżdżone pętle w Pythonie

for a in [0..1]: 
    for b in [0..1]: 
     for c in [0..1]: 
      do something 

Ale mogę mieć 15 różnych zmiennych. Czy istnieje prostszy sposób jak

for a, b, c in [0..1]: 
    do something 

dzięki za pomoc

Odpowiedz

10

itertools.product:

import itertools 
for a,b,c in itertools.product([0, 1], repeat=3): 
    # do something 
+3

Użyj 'repeat = 3' – agf

+0

@agf Dzięki, gotowe! Chociaż '[[0,1]] * 3' również wygląda ładnie. – phihag

+4

Moja jedyna skarga to tak długo, aż odpowiedziałeś. Był okres około 30 sekund, w którym byłem w stanie zawieszenia. – Graphth

3

Można iteracyjne nad produktem z nich wszystkich. Użyj itertools.product i podaj swoje zakresy.

import itertools 
for i in itertools.product(range(2), range(3), range(2)): 
print (i) 

daje

(0, 0, 0) 
(0, 0, 1) 
(0, 1, 0) 
(0, 1, 1) 
(0, 2, 0) 
(0, 2, 1) 
(1, 0, 0) 
(1, 0, 1) 
(1, 1, 0) 
(1, 1, 1) 
(1, 2, 0) 
(1, 2, 1) 
1

Brzmi jak masz matrycy/listę zmiennych, które trzeba przetworzyć. Dlatego najlepszym (i najszybszym) rozwiązaniem jest użycie narzędzia matrix/list.

Takich jak: pakiet Python itertools.

Podobnie jak inne, itertools.product jest prawdopodobnie tym, czego potrzebujesz. Ale zobacz pełną listę pod adresem: http://docs.python.org/library/itertools.html

Powodzenia.