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

如何以Pythonic方式获取列表中长度≥2的所有连续子数组

更Pythonic的实现方案

你的需求本质是提取数组中所有长度≥2的连续子数组,原代码里手动维护p变量是冗余的,我们可以直接通过索引的逻辑关系简化实现,下面是更符合Python风格的写法:

1. 基础实现(返回结果集合)

from typing import List

def get_consecutive_subarrays(nums: List) -> List[List]:
    length = len(nums)
    # 列表推导式直接生成所有符合要求的子数组
    return [nums[i:j] for i in range(length) for j in range(i + 2, length + 1)]

# 测试调用
result = get_consecutive_subarrays([1,2,3,4])
print(result)
# 输出:[[1,2],[1,2,3],[1,2,3,4],[2,3],[2,3,4],[3,4]]

2. 大数组适配(生成器版本,节省内存)

如果处理的数组规模很大,不需要一次性拿到所有结果,可以改成生成器实现,迭代时才生成对应子数组:

from typing import List, Generator

def gen_consecutive_subarrays(nums: List) -> Generator[List, None, None]:
    length = len(nums)
    for i in range(length):
        for j in range(i + 2, length + 1):
            yield nums[i:j]

# 遍历打印结果
for sub_arr in gen_consecutive_subarrays([1,2,3,4]):
    print(sub_arr)

优化点说明

  • 去掉了冗余的可变变量p,直接通过i+2作为子数组结束索引的起始值,逻辑更直观,减少变量维护成本
  • 函数遵循单一职责原则,不再直接打印结果,而是返回/生成结果集合,复用性更强
  • 列表推导式/生成器的写法是Python社区公认的简洁风格,比嵌套循环加变量维护的写法可读性更高
  • 补充了完整的类型标注,代码可维护性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:42:03