在for循环中使用python next()而不推进循环

-2 投票
4 回答
4208 浏览
提问于 2025-04-18 06:24

我想在一个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

撰写回答