提取所有n元素序列从列表

问题描述 投票:2回答:2

我如何提取从列表中的所有n元素序列?例:

a = [0,1,2,3,4]
assert f(a,1) == [[0],[1],[2],[3],[4]]
assert f(a,2) == [[0,1],[1,2],[2,3],[3,4]]
assert f(a,3) == [[0,1,2],[1,2,3],[2,3,4]]
assert f(a,4) == [[0,1,2,3],[1,2,3,4]]
assert f(a,5) == [[0,1,2,3,4]]

什么是最快的实现f的?

python sequence
2个回答
1
投票

听起来像一个典型的zip使用

def f(a, n):
    return list(zip(*[a[i:] for i in range(n)]))

1
投票

这里有一个方法,你可以使用一台发电机的功能,将其从名单中yield连续片,直到有没有剩余所需长度的做到这一点:

def f(x, k, i = 0):
    while len(x[i : i+k]) == k:
        yield x[i : i+k]
        i += 1

用法

a = [0,1,2,3,4]

list(f(a, 1))
#[[0], [1], [2], [3], [4]]

list(f(a, 2))
#[[0, 1], [1, 2], [2, 3], [3, 4]]

list(f(a, 3))
#[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

推荐问答