我read the documentation在next()上我清楚地理解它。根据我的理解,next()用作对可迭代对象的引用,并使python循环到下一个可迭代对象。说得通!我的问题是,如何在内置for循环的上下文之外有用吗?什么时候有人需要直接使用next()?有人可以提供一个简单的例子吗?谢谢伙伴们!
答案 0 :(得分:4)
幸运的是,我昨天写了一篇:
def skip_letters(f, skip=" "):
"""Wrapper function to skip specified characters when encrypting."""
def func(plain, *args, **kwargs):
gen = f(p for p in plain if p not in skip, *args, **kwargs)
for p in plain:
if p in skip:
yield p
else:
yield next(gen)
return func
这使用next
从生成器函数f
获取返回值,但散布其他值。这允许一些值通过生成器传递,但其他值可以直接生成。
答案 1 :(得分:2)
我们可以在很多地方使用next
,例如。
在阅读文件时删除标题。
with open(filename) as f:
next(f) #drop the first line
#now do something with rest of the lines
基于迭代器的zip(seq, seq[1:])
实施(来自pairwise
recipe iterools):
from itertools import tee, izip
it1, it2 = tee(seq)
next(it2)
izip(it1, it2)
获取满足条件的第一项:
next(x for x in seq if x % 100)
使用相邻项目作为键值创建字典:
>>> it = iter(['a', 1, 'b', 2, 'c', '3'])
>>> {k: next(it) for k in it}
{'a': 1, 'c': '3', 'b': 2}
答案 2 :(得分:1)
next
在很多不同的方面很有用,甚至在for循环之外也是如此。例如,如果你有一个可迭代的对象而你想要第一个符合条件的对象,你可以给它一个generator expression,如下所示:
>>> lst = [1, 2, 'a', 'b']
>>> # Get the first item in lst that is a string
>>> next(x for x in lst if isinstance(x, str))
'a'
>>> # Get the fist item in lst that != 1
>>> lst = [1, 1, 1, 2, 1, 1, 3]
>>> next(x for x in lst if x != 1)
2
>>>