在区块中迭代列表的最“pythonic”方法是什么?

我有一个Python脚本,它需要输入一个整数列表,我需要一次处理四个整数。 不幸的是,我没有对输入的控制,或者我将它作为四元组元素列表传入。 目前,我正在以这种方式迭代它:

for i in xrange(0, len(ints), 4):
    # dummy op for example code
    foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]

但它看起来很像“C-think”,这让我怀疑是否有更多的pythonic方式来处理这种情况。 该列表在迭代后被丢弃,所以不需要保存。 也许像这样会更好?

while ints:
    foo += ints[0] * ints[1] + ints[2] * ints[3]
    ints[0:4] = []

尽管如此,仍然不太“觉得”是正确的。 : - /

相关问题:如何在Python中将列表分成均匀大小的块?


从Python的itertools文档的recipes部分修改:

from itertools import izip_longest

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return izip_longest(*args, fillvalue=fillvalue)


用伪码保持示例简洁。

grouper('ABCDEFG', 3, 'x') --> 'ABC' 'DEF' 'Gxx'

注意: izip_longest是Python 2.6的新增功能。 在Python 3中使用zip_longest


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

简单。 简单。 快速。 适用于任何序列:

text = "I am a very, very helpful text"

for group in chunker(text, 7):
   print repr(group),
# 'I am a ' 'very, v' 'ery hel' 'pful te' 'xt'

print '|'.join(chunker(text, 10))
# I am a ver|y, very he|lpful text

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']

我是一个粉丝

chunkSize= 4
for i in xrange(0, len(ints), chunkSize):
    chunk = ints[i:i+chunkSize]
    # process chunk of size <= chunkSize
链接地址: http://www.djcxy.com/p/18017.html

上一篇: What is the most "pythonic" way to iterate over a list in chunks?

下一篇: How do I use Python's itertools.groupby()?