Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用迭代器实现chop()_Python_Iterator - Fatal编程技术网

Python 使用迭代器实现chop()

Python 使用迭代器实现chop(),python,iterator,Python,Iterator,当前版本: def chop(ar,size): p=len(ar)/size for i in xrange(p): yield ar[(i*size):((i+1)*size)] ar是列表()的类型 我想要的是chop()接受迭代器并返回迭代器 for i in chop(xrange(9),3): for j in i: print j, print 印刷品 0 1 2 3 4 5 6 7 8 在中有一个实现: 这是一个

当前版本:

def chop(ar,size):
    p=len(ar)/size
    for i in xrange(p):
        yield ar[(i*size):((i+1)*size)]
ar是列表()的类型

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

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

0 1 2
3 4 5
6 7 8

在中有一个实现:


这是一个非常聪明的实现。我猜这就是为什么它会出现在文档中。虽然我觉得它有点太聪明了。它需要一个注释来解释izip和指向同一迭代器的多个指针是如何交互的。@Omnifarious:我发现
itertools
文档中的许多示例都是这样的(即太聪明了)。但是我认为,仔细思考它对于理解如何有效地使用迭代器做有趣的事情是一个很好的练习Thanks@Omnifarious,这个答案已经多次出现了。我认为现在已经是惯用的Python了:)
def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)