2016-10-11 4 views
0

unten, set1, set2, set3 sind Listen mit len ​​(setn) = len (index). Ich möchte über jede dieser Listen Schleife (SETn) wie folgtwie über mehrere Listen in Python Schleife

index = range(10) 
set1 = range(10,20) 
set2 = range(30,40) 
set3 = range(40,50) 
listset = [set1, set2, set3] 
for i in listset: 
    for k, j in zip(index, i): 
    print k, j 

Result: 
0 s 
1 e 
2 t 
3 1 
0 s 
1 e 
2 t 
3 2 
0 s 
1 e 
2 t 
3 3 

Wie kann ich ein Ergebnis zu erhalten, das die jedes Element von „index, set1“ druckt (wie unten angegeben), gefolgt von „index, set2 ", gefolgt von" index, set3 ".

0 10 
1 11 
2 12 
3 13 
4 14 
5 15 
6 16 
7 17 
8 18 
9 19 
and so on... 
+0

Ihre For-Schleife funktioniert, um das erwartete Ergebnis zu erhalten, wonach Sie suchen? – Boud

+2

Sorry, aber ich denke, dass meine Bearbeitung der Frage Ihr Problem gelöst hat ... Es war also nur ein Tippfehler mit den Zitaten. –

+0

Der korrekt editierte Post (ersetzt die Literale ''set1''etc durch die reellen Variablennamen' set1' (keine Apostrophe mehr, erzeugt die gewünschte Ausgabe ;-) – Dilettant

Antwort

1

Sie wollen enumerate kombinieren und itertools.chain

from itertools import chain 
s1 = range(10) 
s2 = range(10, 20) 
s2 = range(20, 30) 
c = chain(enumerate(s1), enumerate(s2), enumerate(s3)) 
for i, n in c: 
    print(str(i).ljust(4), n) 
+0

Könnten Sie bitte eine kurze Erklärung geben, wie diese Kette funktioniert.Zum Beispiel habe ich versucht "für i in c: print ich", die die gleichen Ergebnisse mit einer anderen Formatierung ausgibt. Also, was ist der Unterschied zwischen print ich, n und drucken Sie einfach i. Wie bekomme ich drucken nur die erste (oder eine bestimmte) Menge (s1, s2) von c? – gogo

+0

@ gogo Wir geben 'chain' eine beliebige Anzahl von Iteratoren.' chain' gibt einen Generator, der ergibt Werte von diesen Iteratoren in um zu erschöpfen. Also bekommen wir zuerst alle Sachen von 's1' dann von' s2' und so weiter. Wenn Sie nur 's1' und' s2' von 'c' wollen, dann müssen Sie entweder jeden Wert überprüfen, um zu sehen, ob es der erste Wert von' s3' ist oder 's3' von der Definition von' c' –

+0

@gogo ausschließt Wenn Sie sich die Ausgabe von 'list (enumerate ([10, 11, 12]))' ansehen, werden Sie sehen, dass es '[(0, 10), (1, 11), (2, 12)] erzeugt. '. Was enumeriert ist, ersetzt jedes Element in einer Sequenz durch ein Tupel von '(index, element)' wobei 'index' der Index dieses Elements in der Liste ist. Also, wenn Sie 'für i in c schreiben:', 'i' ist gleich diesen Tupeln. Wenn Sie 'für i, n in c:' schreiben, entpackt es automatisch die Tupel, so dass 'i' der Index und' n' das Element ist. –

1

Sie können verketten set1, 2 und 3 zusammen, dann verwenden itertools.cycle (Index) und RV die resultierenden zwei Dinge zusammen: zip(itertools.cycle(index), set1 + set2 + set3)

Verwandte Themen