Используйте python next() в цикле for без продвижения цикла for

Я хочу использовать next() в цикле for для обработки следующего слова без продвижения цикла for.

words = ["please", "do", "loop", "in", "order"]
for word in words:
    print word
    checknextword = str(next((word for word in words), None))

Таким образом, я хочу напечатать:

>>>please
>>>do
>>>loop
>>>in
>>>order

Но код выдает:

>>>please
>>>loop
>>>order

4 ответа

Решение

Вы можете использовать как текущее, так и следующее слово, используя:

for word, next_word in zip(words[:-1], words[1:]):
    print word
    checknextword = next_word

Вы можете сделать это как:

words = ["please", "do", "loop", "in", "order"]

for i,j in map(None, words, words[1:]):    #j will contain the next word and None if i is the last element of the list
    print i

[OUTPUT]
please
do
loop
in
order

Ваш вопрос не очень понятен - почему вы хотите получить доступ к следующему элементу и что вы хотите с ним делать.

Если вы просто хотите получить доступ к следующему элементу, есть хороший рецепт для парной итерации в документации к пакету itertools:

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

Это позволяет вам перебирать элементы и следующие элементы в вашем списке, все за один раз (хотя у вас будет проблема в конце списка - но все равно неясно, что вы хотите там):

words = ["please", "do", "loop", "in", "order"]
for word, nextword in pairwise(words):
    ### do something with word
    ### do something else based on next word

Это как "Я хочу стрелять из пистолета без стрельбы".

next() метод должен вызываться с генератором и должен идти на один шаг дальше, извлекая следующий элемент. Если вы вызываете его на генераторе, он либо пойдет на один шаг дальше (для данного генератора), либо повысит StopIteration,

Похоже, что вы ожидаете от next чтобы получить предмет рядом с текущим. Если вы вызовете его на том же итераторе, что и в цикле, он получит его, но продвинется еще на один шаг вперед. Ответ был sshashank124 обеспечивает возможное решение для этого.

Другим решением является отслеживание текущего индекса в вашем списке и попытка получить элемент, который на один индекс дальше.

Другие вопросы по тегам