seq[pos:pos + size] for pos in range(0, len(seq), size) 在 Python 中有什么作用?

约翰·D

来自 nosklo 在什么是迭代块中列表的最“pythonic”方式中的回答返回线在做什么:

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), size))

我知道输出会是什么,我只想知道这是如何工作的。

编辑:添加用例以希望消除混淆。

我正在使用定义的函数读入一个未知大小的列表并从中抓取 8 个对象,通过某些东西运行这 8 个对象,然后抓取下一个 8 等等,直到列表完成。nosklo 帖子中的用例:

animals = ['cat', 'dog', 'rabbit', 'duck', 'bird', 'cow', 'gnu', 'fish']

for group in chunker(animals, 3):
    print group
# ['cat', 'dog', 'rabbit']
# ['duck', 'bird', 'cow']
# ['gnu', 'fish']
拉屎

(<expr> for <var> in <itr>)是一个生成器表达式。相当于

def anon():
    for <var> in <itr>:
        yield <expr>
anon()

seq[<start>:<stop>]是切片符号。对于列表,它将使用该范围内的元素创建一个新的列表对象。应该和[seq[i] for i in range(<start>, <stop>)].

range(<start>, <stop>, <step>)是内置的范围。生成一个可迭代的整数。

len(seq)长度内置。与 相同seq.__len__(),它应该获取对象的“长度”。由对象决定这意味着什么,但对于像list它这样的序列类型应该是元素的数量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章