2015-12-15 3 views
5

Betrachten Sie, es gibt eine Liste A = [ [ ], [ ], ..., [ ] ] (n-mal). Und jede Unterliste von A enthält mehrere Listen in ihnen. Was ich tun möchte, ist, sie gleichzeitig zu durchlaufen. Es kann einfach mit der Funktion "itertools.product" aus der itertools-Bibliothek durchgeführt werden. Etwas wieWie iteriere ich in einem kaskadierten Format (in einer for-Schleife) über eine Liste unbekannter Länge in Python?

for i,j,k in itertools.product(A[0],A[1],A[2]): 
     #my code 

wird ausreichen. Allerdings weiß ich nicht die Länge der Liste A. Wenn es 3 ist, kann ich den obigen Code verwenden. Zur Zeit mache ich so etwas wie diese

if len(A) == 2: 
     for i,j in itertools.product(A[0],A[1]): 
      #my code 

    elif len(A) == 3: 
     for i,j,k in itertools.product(A[0],A[1],A[2]): 
      #same code with minor changes to include parameter k 

    elif len(A) == 4: 
     for i,j,k,l in itertools.product(A[0],A[1],A[2],A[3]): 
      #same code with minor changes to include parameter k and l 

Da diese mühsam ist, wollte ich wissen, ob es eine allgemeine Lösung anderes Verständnis oder etwas mit Liste ist. Ich schreibe in Python.

+0

Braucht es eine for-Schleife sein? Es gibt andere Möglichkeiten, Listen unbekannter Länge zu durchlaufen – jmugz3

+0

Nicht unbedingt eine for-Schleife, aber es sollte den Zweck erfüllen. Jedenfalls habe ich die Lösung (mit * -Unpacking) – codingCoffee

Antwort

5

können Sie * -unpacking verwenden:

>>> A = [[1,2],[3,4]] 
>>> for ii in itertools.product(*A): 
...  print(ii) 
...  
(1, 3) 
(1, 4) 
(2, 3) 
(2, 4) 

ii wird ein Tupel der Werte sein. Anstatt i,j,k usw. zu schreiben, verwenden Sie ii[0],ii[1],ii[2]. Wenn Sie mit diesen Variablen qualitativ verschiedene Dinge machen wollen, abhängig davon, wie viele davon vorhanden sind, gibt es natürlich keine Möglichkeit, eine Art von Verzweigung zu umgehen. Aber wenn die einzigen Unterschiede darin bestünden, die zusätzlichen Variablen in die gleiche Art von Operationen einzubauen, könnten Sie den Code in Ihrer Schleife wahrscheinlich erheblich vereinfachen.

+0

Mehr zu diesem Thema: https://docs.python.org/2/tutorial/controlflow.html#arbitrary-argument-lists – Kendas

1

Ist das in Ordnung für Sie?

for z in itertools.product(*A): 
Verwandte Themen