Python 如何提取整数列表中连续同奇偶元素并分组
Python实现连续同奇偶整数分组
需求说明
给定一个整数列表,将奇偶性相同的连续数字归为同一子分组,奇偶性发生变化时自动拆分出新分组:
- 示例输入:
[5, 9, 11, 20, 24, 30, 31, 33, 39, 41] - 示例输出:
[[5, 9, 11], [20, 24, 30], [31, 33, 39, 41]]
实现思路
逻辑非常直白,单次遍历就能完成,时间复杂度O(n):
- 先处理空列表的边界情况,直接返回空结果
- 初始化第一个分组,记录第一个元素的奇偶性(对2取余,结果1为奇数、0为偶数)
- 从第二个元素开始逐个遍历:
- 当前元素奇偶性和当前分组一致:直接追加到当前分组
- 奇偶性不一致:把当前分组存入结果列表,用当前元素新建分组,更新奇偶标记
- 遍历结束后,把最后一个未存入结果的分组追加进去即可
代码实现
易读版(无依赖,新手友好)
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
相关产品推荐
相关产品推荐

