2016-10-24 3 views
1

Angenommen, ich habe ein iterables Element und möchte Elemente überspringen, solange die Elemente mit einem bestimmten Prädikat übereinstimmen. Ich möchte den aktuellen Iterator beeinflussen, keinen neuen zurückgeben.Pythonic Weg, um Elemente in einem iterablen zu überspringen?

Ich konnte einfach tun:

# untested, just for explanation 

e = next(iterable) 
while True: 
    if something(e): 
     e = next(iterable) 
    else: 
     break 

Aber gibt es eine eingebaute Funktion für diese oder eine gemeinsame Idiom?

Antwort

0

Warum nicht einfach

e = next(iterable) 
while something(e): 
    e = next(iterable) 

Auch, warum „ich den aktuellen Iterator beeinflussen will, keine neuen zurückkehren.“? Ich kann mir kein Szenario vorstellen, wenn Sie das brauchen würden. Wenn Sie zulassen, dass ein neuer Iterator den aktuellen umbricht, ist itertools.dropwhile, das wim vorschlägt, viel mehr Pythonic (und lesbar).

0

Ihr Beispiel einfach nur stoppt nach dem ersten falschen Ergebnis, so dass dies macht das gleiche:

>>> it = iter(range(100000)) # just constructing _an_ iterator 
>>> next(itertools.filterfalse(lambda i: i != 12, it)) 
12 

Ich bin mir nicht klar, was - genau - „Ich möchte das aktuelle Iterator beeinflussen, ist kein Rück new one "bedeutet, aber beachte, dass it selbst fortgeschritten ist:

>>> next(it) 
13 
Verwandte Themen