首页 > 解决方案 > 列表上的滑动窗口列表

问题描述

我有一个长度列表L

In [92]: li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我知道如何生成N重叠的子列表

In [93]: L, N = 10, 4                                                                     

In [94]: [li[i:L-N+1+i] for i in range(N)]                                                
Out[94]: 
[[1, 2, 3, 4, 5, 6, 7],
 [2, 3, 4, 5, 6, 7, 8],
 [3, 4, 5, 6, 7, 8, 9],
 [4, 5, 6, 7, 8, 9, 10]]

另一方面,我不知道如何在不使用的情况下获得相同的结果L

In [95]: [li[i:i-N+1] for i in range(N)]                                                  
Out[95]: [[1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8], [3, 4, 5, 6, 7, 8, 9], []]

没有i-N+1 if i-N+1 else None用作切片规范的第二部分。

L是否可以在不使用和不带条件的情况下获取我的子列表列表?

标签: pythonslice

解决方案


厚颜无耻的布尔滥用:

li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
N = 4
lsts = [li[i:(i-N+1 or None)] for i in range(N)]
print(*lsts, sep='\n')
# [1, 2, 3, 4, 5, 6, 7]
# [2, 3, 4, 5, 6, 7, 8]
# [3, 4, 5, 6, 7, 8, 9]
# [4, 5, 6, 7, 8, 9, 10]

推荐阅读