Python中以5元素为滑动窗口遍历列表的最Pythonic实现方式
嘿,这个需求太常见了!要实现这种滑动窗口遍历,最Pythonic的方法有俩,我给你详细说说:
方法一:列表推导式(直观又简洁)
这应该是最容易理解也最贴合Python风格的写法,直接利用列表的切片特性就能搞定:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] window_size = 5 sliding_windows = [lst[i:i+window_size] for i in range(len(lst) - window_size + 1)] print(sliding_windows)
运行结果完全符合你的预期:
[[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8], [5, 6, 7, 8, 9]]
原理很直白:range(len(lst) - window_size + 1)会生成刚好对应所有窗口起始位置的索引(这里是0到4,一共5个索引),每个索引i对应的切片lst[i:i+5]就是当前窗口的连续元素。
方法二:用
zip实现通用滑动窗口(灵活度更高) 如果你的窗口大小可能需要动态调整,或者想写更通用的代码,用zip配合列表生成式会更优雅:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] window_size = 5 # 生成多个偏移后的子列表,再用zip打包成窗口 sliding_windows = [list(window) for window in zip(*[lst[i:] for i in range(window_size)])] print(sliding_windows)
这里的[lst[i:] for i in range(window_size)]会生成5个依次偏移一位的列表:[1,2,...9]、[2,...9]、[3,...9]、[4,...9]、[5,...9],zip(*...)会把这些列表的对应位置元素打包成元组,最后转成列表就得到了我们要的滑动窗口。
为什么这两种是Pythonic的?
- 它们都依赖Python内置的核心特性(切片、列表推导式、zip),不需要额外安装库,代码简洁易读。
- 完全符合Python“优雅、明确、简单”的设计哲学,别人看一眼就知道你要做什么。
如果要选最优解,固定窗口大小的场景下列表推导式更直观;要是窗口大小可能变化,zip的方法通用性更强。
内容的提问来源于stack exchange,提问作者captainKirk104
相关产品推荐
相关产品推荐

