如何按固定周期筛选Python数组元素:保留5个丢弃15个循环执行
高效实现方案
按你说的「每20个元素为一个周期,前5个保留、后15个丢弃」的规则,分场景给出最优实现:
纯Python原生实现(无第三方依赖)
直接通过索引取模判断即可,时间复杂度O(n),适合小数据量或者不能装第三方库的场景:
# 直接返回新列表 def select_5_drop_15(arr): return [item for idx, item in enumerate(arr) if idx % 20 < 5] # 超大数组场景用生成器,内存占用O(1) def select_5_drop_15_iter(arr): for idx, item in enumerate(arr): if idx % 20 < 5: yield item
示例:输入长度为25的数组,会返回前5个、第21~25个,总共10个元素,完全符合规则。
Numpy实现(数值数组最优)
如果是数值类数组,用numpy的向量化操作效率最高,万级以上数组的处理速度是纯Python的50~100倍:
import numpy as np # 把原数组转为numpy数组 np_arr = np.array(你的原数组) mask = np.arange(np_arr.shape[0]) % 20 < 5 result = np_arr[mask]
- 不需要写Python层循环,完全由numpy底层C逻辑执行,性能拉满
- 自动兼容非20整数倍长度的数组,末尾不足一个周期的部分也会按规则处理
规则调整方法
如果后续需要修改保留/丢弃的数量,只需要修改两个参数即可:
- 模的数值 = 保留数量 + 丢弃数量
- 判断条件为索引取模结果 < 保留数量
比如要改成保留3个、丢弃7个,就把idx %20 <5改成idx %10 <3即可。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

