在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循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章
循环画廊使用 next() 和 prev() 方法的问题 - javascript / jQuery
在VSCode中获取Javascript类型提示而不导入,这将导致循环依赖