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

Python中查找列表最长连续正数子列表?求优化方案

优化最长连续正数子列表的Python代码方案

你的代码思路没问题,但嵌套循环会让时间复杂度升到O(n²),而且变量管理有点繁琐。下面给你几个更简洁高效的方案,顺便讲下对应的Python技巧和术语:


方案1:单次遍历法(O(n)时间复杂度)

这是最基础的优化思路,只遍历列表一次,实时跟踪当前连续正数的起始位置和长度,同时记录最长的那一组:

A = [-1,2,-3,2,3,-4,3,4,5,-6,-19,-20,7,8,9,10,6,8,-19,-22,-99]

max_len = 0
current_len = 0
start_idx = 0
best_start = 0
best_end = 0

for idx, num in enumerate(A):
    if num >= 0:
        current_len += 1
        # 第一次遇到正数时记录起始位置
        if current_len == 1:
            start_idx = idx
        # 更新最长子列表的信息
        if current_len > max_len:
            max_len = current_len
            best_start = start_idx
            best_end = idx
    else:
        current_len = 0

print("The longest list with positive numbers are", A[best_start:best_end+1])

用到的技巧&术语:

  • 单次遍历:把时间复杂度从原来的O(n²)降到O(n),效率大幅提升
  • enumerate():同时获取列表的索引和元素,避免手动计算位置
  • 状态跟踪:用变量记录当前连续序列的状态(长度、起始位置),实时更新最优解

方案2:用itertools.groupby分组(Python标准库工具)

利用itertools.groupby可以快速把连续的相同特征的元素分组,这里我们按“是否为正数”来分组:

from itertools import groupby

A = [-1,2,-3,2,3,-4,3,4,5,-6,-19,-20,7,8,9,10,6,8,-19,-22,-99]

# 按是否为正数分组,过滤掉负数组,只保留正数的子列表
positive_groups = [list(group) for key, group in groupby(A, lambda x: x >= 0) if key]

# 找出最长的那个正数子列表
longest = max(positive_groups, key=len)

print("The longest list with positive numbers are", longest)

用到的技巧&术语:

  • itertools.groupby:Python标准库中的迭代器工具,用于连续元素的分组,核心是通过key函数定义分组规则
  • lambda表达式:匿名函数,用来快速定义分组的判断逻辑(这里判断元素是否≥0)
  • 列表推导式:简洁地过滤和转换分组结果,生成只包含正数子列表的列表
  • max()的key参数:通过指定key=len,直接按子列表长度找出最长的那个

方案3:生成器+max函数(极简函数式风格)

如果想要更简洁的写法,可以用生成器表达式替代列表推导式,减少内存占用(不需要存储所有正数子列表,只在迭代时计算):

from itertools import groupby

A = [-1,2,-3,2,3,-4,3,4,5,-6,-19,-20,7,8,9,10,6,8,-19,-22,-99]

# 生成器表达式,只迭代不存储所有分组
longest = max((list(group) for key, group in groupby(A, lambda x: x >= 0) if key), key=len)

print("The longest list with positive numbers are", longest)

用到的技巧&术语:

  • 生成器表达式:和列表推导式类似,但返回的是迭代器,不会一次性把所有元素加载到内存,适合处理大列表
  • 函数式编程风格:通过组合标准库函数和表达式,用更少的代码实现逻辑,可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57