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

