python - 列表上的滑动窗口列表
问题描述
我有一个长度列表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
是否可以在不使用和不带条件的情况下获取我的子列表列表?
解决方案
厚颜无耻的布尔滥用:
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]
推荐阅读
- ios - 如何从钱包通行证调用 Safari 浏览器
- android - android studio中的预览是空白的,只显示移动框架
- javascript - 在 ReactJs 中替换悬停元素
- rest - 无法使用 REST API 在 GeoServer 中创建新图层(要素类型)
- jquery - 表格列宽未根据内容大小调整
- java - 从 Java 中的 pkcs#12 文件读取 MAC 迭代
- node.js - 如何在超级账本结构的视图页面上使用节点 js 显示当前哈希值、上一个哈希值
- unity3d - 仅渲染 Unity 纹理的某些部分
- java - Reactivestreams 订阅者不适用于 Spring Reactor Mono。为什么?
- intellij-idea - 如何在代码完成后禁用在 PhpStorm 中插入分号