在区块中迭代列表的最“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?