给定一个列表
A = [1 2 3 4 5 6]
是否有任何惯用的(Pythonic)方式来迭代它,就好像它是
B = [(1, 2) (3, 4) (5, 6)]
除了索引之外?这感觉像是 C 的遗留物:
for a1,a2 in [ (A[i], A[i+1]) for i in range(0, len(A), 2) ]:
我忍不住觉得应该有一些巧妙的技巧,使用 itertools 或切片或其他东西。
(当然,一次两个只是一个例子;我想要一个适用于任何 n 的解决方案。)
编辑:相关在 Python 中一次迭代 2 个(或 n 个)字符的字符串 https://stackoverflow.com/questions/1162592/iterate-over-a-string-2-or-n-characters-at-a-time-in-python但即使是最干净的解决方案(已接受,使用 zip)在没有列表理解和 * 符号的情况下也不能很好地推广到更高的 n 。
From http://docs.python.org/library/itertools.html http://docs.python.org/library/itertools.html:
from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
i = grouper(3,range(100))
i.next()
(0, 1, 2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)