Python高效过滤已用值 获取0-2407范围下一个可用数字
实现方案
优化逻辑
针对大文件场景,核心做3点效率优化:
- 读取文件时仅加载需要的
Index列,跳过所有无关字段,大幅降低内存占用和读取耗时 - 将目标区间内的已使用值转为集合存储,成员判断时间复杂度为O(1),远快于列表的线性查找
- 无需提前生成0~2407的全量数字数组,从区间最小值开始顺序校验,找到第一个未被占用的数字就直接返回,不需要遍历全量数据
可直接运行的代码
import pandas as pd # 目标数字区间 RANGE_START = 0 RANGE_END = 2407 # 读取文件时只加载Index列,适配大文件场景 # 如果是其他格式的文件,替换为pandas对应的读取方法即可,比如pd.read_excel df = pd.read_csv("你的存储文件路径", usecols=["Index"]) # 筛选出落在目标区间内的已使用数字,去重后转集合 used_set = set( df["Index"] .query("@RANGE_START <= Index <= @RANGE_END") .unique() ) # 查找第一个可用数字 next_available = None for num in range(RANGE_START, RANGE_END + 1): if num not in used_set: next_available = num break print(f"下一个未被使用的可用数字为:{next_available}")
额外说明
- 如果你需要获取所有未被使用的数字列表,只需要把查找部分替换为
unused_nums = [num for num in range(RANGE_START, RANGE_END+1) if num not in used_set]即可 - 不要直接用列表存储已使用值做存在性判断,当已使用值量级到十万级以上时,列表查找的速度会比集合慢数百倍
- 由于目标区间仅2408个连续值,上述方案哪怕面对千万行级的大文件,整体耗时也在毫秒级
内容的提问来源于stack exchange,提问作者Alexandre Torres
相关产品推荐
相关产品推荐

