我有一个长度为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
且不使用条件的情况下获取我的子列表列表?
最佳答案
厚颜无耻的 bool 滥用:
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]
关于python - 列表上的滑动窗口列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58936499/