在for循环中使用python next()而不推进for循环[重复]

Posted

技术标签:

【中文标题】在for循环中使用python next()而不推进for循环[重复]【英文标题】:Use python next() in for loop without advancing the for loop [duplicate] 【发布时间】:2014-05-13 13:16:43 【问题描述】:

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

【问题讨论】:

尚不清楚您要在这里完成什么。您的示例输出将由for word in words: print(word) 的简单形式生成。 无法重现问题。 也许你想要这样的***.com/questions/6822725/… 【参考方案1】:

您可以同时使用当前单词和下一个单词:

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

【讨论】:

不需要指定words[:-1]zip 会将输出截断为最短参数的长度(在本例中为第二个)。 @jonrsharpe:是的。不过,我觉得它更明确。【参考方案2】:

你可以这样做:

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

【讨论】:

【参考方案3】:

你的问题不是很清楚——你为什么要访问下一个项目,你想用它做什么。

如果您只想访问下一个项目,itertools package 的文档中有一个不错的 recipe for pairwise iteration:

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

【讨论】:

【参考方案4】:

这就像“我想用我的枪射击而不射击”。

next() 方法将与生成器一起调用,并且应该更进一步,检索下一项。如果您在生成器上调用它,它会更进一步(对于给定的生成器)或引发StopIteration

看起来,就像您期望从next 获得当前项目旁边的项目一样。如果您在与循环中相同的迭代器上调用它,它会检索它,但会更进一步。 sshashank124 的答案为此提供了可能的解决方案。

另一种解决方案是跟踪列表中的当前索引并尝试获取一个项目,该项目是一个进一步的索引。

【讨论】:

以上是关于在for循环中使用python next()而不推进for循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章

for循环的本质

For循环将列表的所有元素放入不同的文本文件中,而不是在python中遍历每个元素

Python中的迭代器与可迭代:iter()和next()

如何在Python中的for循环内创建对象列表而不继承属性值[重复]

如何在不推送到服务器的情况下更新中继存储

python中for循环的用法