在for循环中使用python next()而不推进循环
我想在一个for循环中使用next(),这样可以处理下一个单词,但又不想让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 个回答
0
这就像是“我想从我的枪里发射,但不想开枪”。
next()
方法是用来和生成器一起使用的,它会向前走一步,获取下一个项目。如果你在一个生成器上调用它,它要么会向前走一步(对于给定的生成器),要么会抛出 StopIteration
的错误。
看起来你是希望从 next
中获取当前项目的下一个项目。如果你在循环中使用同一个迭代器调用它,它会获取下一个项目,但同时也会向前走一步。sshank124 的回答提供了一个可能的解决方案。
另一种解决方案是跟踪你列表中的当前索引,然后尝试获取下一个索引的项目。
1
你的问题不太清楚——你为什么想访问下一个项目?你想用它做什么呢?
如果你只是想访问下一个项目,文档中有一个很不错的成对迭代的例子,它在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
1
你可以这样做:
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
5
你可以同时获取当前单词和下一个单词,方法是使用:
for word, next_word in zip(words[:-1], words[1:]):
print word
checknextword = next_word