Используйте 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 обеспечивает возможное решение для этого.
Другим решением является отслеживание текущего индекса в вашем списке и попытка получить элемент, который на один индекс дальше.