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

Python 如何提取整数列表中连续同奇偶元素并分组

Python实现连续同奇偶整数分组

需求说明

给定一个整数列表,将奇偶性相同的连续数字归为同一子分组,奇偶性发生变化时自动拆分出新分组:

  • 示例输入:[5, 9, 11, 20, 24, 30, 31, 33, 39, 41]
  • 示例输出:[[5, 9, 11], [20, 24, 30], [31, 33, 39, 41]]

实现思路

逻辑非常直白,单次遍历就能完成,时间复杂度O(n):

  1. 先处理空列表的边界情况,直接返回空结果
  2. 初始化第一个分组,记录第一个元素的奇偶性(对2取余,结果1为奇数、0为偶数)
  3. 从第二个元素开始逐个遍历:
    • 当前元素奇偶性和当前分组一致:直接追加到当前分组
    • 奇偶性不一致:把当前分组存入结果列表,用当前元素新建分组,更新奇偶标记
  4. 遍历结束后,把最后一个未存入结果的分组追加进去即可

代码实现

易读版(无依赖,新手友好)

def group_continuous_same_parity(nums):
    # 空列表直接返回
    if not nums:
        return []
    
    result = []
    current_group = [nums[0]]
    # 记录当前分组的奇偶标记
    current_parity_flag = nums[0] % 2

    for num in nums[1:]:
        num_parity = num % 2
        if num_parity == current_parity_flag:
            current_group.append(num)
        else:
            # 奇偶变了,存旧组开新组
            result.append(current_group)
            current_group = [num]
            current_parity_flag = num_parity
    
    # 补上最后一个分组
    result.append(current_group)
    return result


# 测试验证
if __name__ == "__main__":
    input_list = [5, 9, 11, 20, 24, 30, 31, 33, 39, 41]
    print(group_continuous_same_parity(input_list))
    # 运行输出:[[5, 9, 11], [20, 24, 30], [31, 33, 39, 41]]

精简版(借助标准库)

如果不想自己写遍历逻辑,可以直接用Python标准库itertools.groupby,它本身就是按连续相同键值做分组的,刚好匹配需求:

from itertools import groupby

def group_continuous_same_parity(nums):
    return [list(group) for _, group in groupby(nums, key=lambda x: x % 2)]

注意:groupby不会对列表做全局排序后再分组,只会合并连续键值相同的元素,刚好符合我们要「连续同奇偶」的要求,不要误用它做全局奇偶拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:31:14