python - 列表上的滑动窗口列表

标签 python slice

我有一个长度为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/

相关文章:

python - foreach 与 Pyspark 数据框

python - 删除一个词,除非它是另一个词的一部分

python - 从两个不同路径导入的类不相等?

arrays - 对数组进行切片或使用 Iterator::skip 哪个更有效?

Golang 从界面 slice 中删除 nil{}

go - 对 byte slice 进行更快的按位与运算

pandas - 从另一个 DataFrame 分配给切片需要匹配的列名称吗?

python - 如何在python中的spark笔记本上使用pandas(dashDB上的数据)

go - 有没有一种方法可以编写通用代码来查明 slice 是否包含 Go 中的特定元素?

python - 拟合数据点,同时强制曲线形状