如何在未排序正负整数列表中查找大于0的最小整数的对应索引
问题解决与实现方案
错误原因分析
你的代码报错是因为将生成器对象直接传入了list.index()方法,该方法要求接收的是列表中存在的具体值,而非生成器/列表容器,因此抛出"generator is not in list"错误。你尝试用list()包裹生成器的方案不可行,是因为转换后得到的是所有正数组成的列表,并非单个数值,自然也不存在于原dist列表中。
高效实现方案
你要求避免排序,以下两种方案时间复杂度均为O(n),远优于排序的O(nlogn),完全适配数千元素的业务场景:
方案1:简洁写法(两次遍历,代码量少)
先计算所有正数的最小值,再查询该值对应的第一个索引:
dist = [-4,1,-2,4,5] # 先筛选正数求最小值 min_positive = min(i for i in dist if i > 0) # 查最小值对应的索引 curr = dist.index(min_positive) print(curr) # 输出结果:1
注意:如果列表中存在多个相同的最小正数,
index()会返回第一个出现的索引,符合常规业务需求。
方案2:最优性能写法(一次遍历,适合大数据量)
单次遍历同时记录最小正数和对应索引,遍历次数比方案1少一次,数据量越大性能优势越明显:
dist = [-4,1,-2,4,5] min_val = float('inf') min_idx = -1 for idx, num in enumerate(dist): # 仅判断正数,且比当前记录的最小值更小 if num > 0 and num < min_val: min_val = num min_idx = idx print(min_idx) # 输出结果:1
可以额外增加无正数的边界处理:遍历结束后如果
min_val仍为inf,说明列表中无正数,可根据业务需求返回默认值或抛出提示。
内容的提问来源于stack exchange,提问作者Patrick_Chong
相关产品推荐
相关产品推荐

