了解builtin next()函数

时间:2014-03-03 21:26:54

标签: python

read the documentation在next()上我清楚地理解它。根据我的理解,next()用作对可迭代对象的引用,并使python循环到下一个可迭代对象。说得通!我的问题是,如何在内置for循环的上下文之外有用吗?什么时候有人需要直接使用next()?有人可以提供一个简单的例子吗?谢谢伙伴们!

3 个答案:

答案 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
>>>