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
相关产品推荐
相关产品推荐

