如何从列表中提取所有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
?
答案 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)]))