我用下面的代码循环一个数组。

arr = [1 ,2 ,3 ,4 ,5 , 6,7]
    for a, b, c in zip(*[iter(arr)]*3):
        print (a, b, c)

它将输出分为(1,2,3)和(4,5,6)两部分
但是我希望输出是连续的(1,2,3),(2,3,4),(3,4,5),(4,5,6),(5,6,7),而且速度更快。
除了iter还有别的方法可以实现这个目标吗?

最佳答案

只需使用切片:

>>> l = list(range(10))
>>> list(zip(l, l[1:], l[2:]))
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]

如果使用itertools.islice
>>> from itertools import islice
>>> list(zip(l, islice(l, 1, None), islice(l, 2, None)))
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]

10-04 17:27