【问题标题】:implementing chop() using iterators使用迭代器实现chop()
【发布时间】:2010-06-29 17:52:34
【问题描述】:

当前版本:

def chop(ar,size):
    p=len(ar)/size
    for i in xrange(p):
        yield ar[(i*size):((i+1)*size)]

ar 是 list() 的类型。

我想要的是chop() 接受迭代器并返回迭代器。

for i in chop(xrange(9),3):
    for j in i:
       print j,
    print

打印

0 1 2
3 4 5
6 7 8

【问题讨论】:

    标签: python iterator


    【解决方案1】:

    itertools documentation 中有一个实现:

    def grouper(n, iterable, fillvalue=None):
        "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
        args = [iter(iterable)] * n
        return izip_longest(fillvalue=fillvalue, *args)
    

    【讨论】:

    • 这是一个非常聪明的实现。猜猜这就是为什么它在文档中。虽然我觉得这有点太聪明了。它需要一个注释来解释 izip 和指向同一迭代器的多个指针如何交互。
    • @Omnifarious:我发现itertools 文档中的许多示例都是如此(即太聪明了)。但我认为仔细思考是一个很好的练习,可以帮助您了解如何使用迭代器有效地做有趣的事情。
    • 我在 doc 中没有走那么远:D 谢谢
    • @Omnifarious,这个答案已经多次出现在 SO 上。我认为它现在是惯用的 Python :)
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2012-01-22
    • 2021-11-16
    相关资源
    最近更新 更多