我已经编写了元组通用版本的代码,我喜欢第一个版本,因为它非常简洁,我看的越多,对我的感觉就越像Pythonic …毕竟,比带zip的衬里更像Pythonic ,星号参数扩展,列表推导,列表切片,列表串联和“范围”?
def ntuples(lst, n):
return zip(*[lst[i:]+lst[:i] for i in range(n)])
即使对于大型列表,itertools版本也应足够高效…
from itertools import *
def ntuples(lst, n):
return izip(*[chain(islice(lst,i,None), islice(lst,None,i)) for i in range(n)])
以及用于不可索引序列的版本:
from itertools import *
def ntuples(seq, n):
iseq = iter(seq)
curr = head = tuple(islice(iseq, n))
for x in chain(iseq, head):
yield curr
curr = curr[1:] + (x,)
无论如何,谢谢大家的建议!:-)