import itertools
def windows(iterable, length=2):
return itertools.izip(*(itertools.islice(it,n,None)
for n,it in enumerate(itertools.tee(iterable,length))))
itemList = ["a","b","c","d","e","f","g","h"]
for group in windows(itemList,length=3):
print('_'.join(group))
SilentGhost 优雅的列表理解更适合这个问题。但只是为了解释为什么我不删除这篇文章:
您可能有一天想要从不是列表的迭代器生成窗口。
因为你不能在不消耗迭代器的情况下获取它的长度,(而且因为一些迭代器可能是无限的),并且由于从迭代器中获取切片总是返回新值,所以你不能使用列表推导 ['_'.join(itemList[i:i+3]) for i in range(len(itemList)-2)] in这种情况。
那么windows 函数实际上是有用的。例如:
def itemList():
for x in range(8):
yield str(x)
for group in windows(itemList(),length=3):
print('_'.join(group))
产量
0_1_2
1_2_3
2_3_4
3_4_5
4_5_6
5_6_7