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

Python如何优雅检测列表中是否存在负数后出现正数的情况

更Pythonic的实现方案

核心判断逻辑为是否存在至少一个负数,其后方出现过正数,无需记录索引值,以下是两种经过验证的优化实现,完全匹配你给出的所有测试用例规则:


方案1:无依赖极简迭代版(可读性最高,性能最优)

无需导入任何模块,时间复杂度O(n),空间复杂度O(1),逻辑直观易维护:

def has_neg_followed_by_pos(my_list):
    seen_neg = False
    for num in my_list:
        if num < 0:
            seen_neg = True
        # 已见过负数的前提下,碰到正数直接返回True
        elif seen_neg and num > 0:
            return True
    return False

方案2:函数式实现(风格简洁,Pythonic属性拉满)

借助itertools.dropwhile跳过列表开头所有非负数,只要剩余元素中存在正数,就说明存在「负数后接正数」的情况:

from itertools import dropwhile

def has_neg_followed_by_pos(my_list):
    return any(num > 0 for num in dropwhile(lambda x: x >= 0, my_list))

用例验证

两种实现均完全符合要求:

  • 输入[-1, 0, -2, 2] → 返回True
  • 输入[1, 2, 3, 2] → 返回False
  • 输入[-1, -2, -3, -4] → 返回False
  • 输入[4, 3, 2, 1, -1] → 返回False

内容的提问来源于stack exchange,提问作者Nicolas Berthier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:09:04