2016-10-24 14 views
1

Скажите, что у меня есть итеративный и вы хотите пропустить элементы, пока элементы соответствуют определенному предикату. Я хочу повлиять на текущий итератор, а не возвращать новый.Pythonic способ пропускать элементы в истребителе?

я мог бы просто сделать это:

# untested, just for explanation 

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

Но есть встроенная функция для этого, или некоторой общей идиомы?

ответ

0

Почему просто не

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

Кроме того, почему «Я хочу, чтобы повлиять на текущий итератор, не возвращает новый.»? Я не могу придумать сценарий, когда вам это понадобится. Если вы разрешаете новый итератор обертывать текущий, itertools.dropwhile, что wim предлагает намного больше Pythonic (и читается).

0

Ваш пример просто останавливается после первого ложного результата, так что это делает то же самое:

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

Я не ясно, на какой - точно - «Я хочу, чтобы повлиять на текущий итератор, а не возвращать новый »означает, но обратите внимание, что it сам продвинулся:

>>> next(it) 
13 
Смежные вопросы