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

时间:2019-02-02 18:46:09

标签: python sequence

如何从列表中提取所有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

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:1)

听起来像经典zip的使用

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