import itertools
with open(fn) as f: for line, line2 in itertools.izip_longest(f, f, fillvalue=''): print line, line2
las,
izip_longest需要Python
2.6或更高版本;2.5仅具有
izip,如果
f有奇数行,它将截断最后一行。当然,提供与生成器相同的功能非常容易。
这是一个更一般的“一次N个”迭代器包装程序:
def natatime(itr, fillvalue=None, n=2): return itertools.izip_longest(*(iter(itr),)*n, fillvalue=fillvalue)
itertools通常是最好的方法,但是,如果您坚持要自己实施,那么:
def natatime_no_itertools(itr, fillvalue=None, n=2): x = iter(itr) for item in x: yield (item,) + tuple(next(x, fillvalue) for _ in xrange(n-1))
在2.5中,我认为最好的方法实际上不是生成器,而是另一种基于itertools的解决方案:
def natatime_25(itr, fillvalue=None, n=2): x = itertools.chain(iter(itr), (fillvalue,) * (n-1)) return itertools.izip(*(x,)*n)
(因为2.5没有内置的
next,而且缺少
izip_longest)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)