2017-04-18 2 views
0

Für exemple, sagen, dass ich den folgenden Code haben:Ist es möglich, eine innere Python 'für' fortzusetzen, wo die äußere für gestoppt?

a = [[1],[2],[3]] 
for c in a: 
    print(c) 
    for d in a: 
     print(d) 

Die aktuelle Ausgabe davon ist:

[1] 
[1] 
[2] 
[3] 
[2] 
[1] 
[2] 
[3] 
[3] 
[1] 
[2] 
[3] 

Meine Frage ist, ob es möglich ist, diesen Code in eine hübsche Weise zu modifizieren, so dass der Ausgang wird wie folgt aus:

[1] 
[2] 
[3] 
[2] 
[3] 
[3] 

mit anderen Worten, wenn es möglich ist, in einem ‚sauberen python‘ ist, die innere Schleife zu haben, die Liste aus dem Index decken die äußere Schleife gestoppt.

Antwort

1

können Sie verwenden enumerate und Liste Slicing Syntax (items[start:end:step], wo start automatisch auf 0 end zu items.length und step-1), um diese zu erreichen: würde

items = [[1], [2], [3]] 
for i, _ in enumerate(items): 
    for item in items[i:]: 
     print(item) 

weitere interessante (wenn auch weniger effizient) Option sein itertools.accumulate mit sum in Verbindung zu verwenden:

from itertools import accumulate 

items = [[1], [2], [3]] 
for item in sum(accumulate(([x] for x in items[::-1])), [])[::-1]: 
    print(item) 
2

ich dieverwenden würde 10 und iterieren Indizes:

a = [[1],[2],[3]] 
for c in range(len(a)): 
    for d in range(c, len(a)): 
     print(a[d]) 
0

Sie könnten einen list_iterator verwenden und flache Kopien nach Bedarf abzweigen:

import copy 
ia = iter(a) 
for ai in ia: 
    print(ai) 
    for ai in copy.copy(ia): 
     print(ai) 

# [1] 
# [2] 
# [3] 
# [2] 
# [3] 
# [3] 
Verwandte Themen