You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在未排序正负整数列表中查找大于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:36:04