如何使用递归算法拆分列表中的奇数与偶数元素
如何使用递归对列表中的奇数和偶数元素进行拆分?
首先明确函数实现要求:输入一个数字列表,返回嵌套列表,第一个子列表存储原列表中的所有奇数(顺序和原列表保持一致),第二个子列表存储原列表中的所有偶数,示例调用结果如下:
oddevenseparator([1]) => [[1], []] oddevenseparator([2]) => [[], [2]] oddevenseparator([1,2,3,4,5,6])=> [[1,3,5],[2,4,6]]
实现思路
递归的核心逻辑是把大问题拆解为「处理当前单个元素」+「递归处理剩余子列表」两个部分:
- 递归终止条件:当输入列表为空时,直接返回
[[], []],表示没有元素需要拆分 - 递归处理逻辑:
- 先取出当前列表的第一个元素,把剩余的子列表传入
oddevenseparator,得到已经拆分完成的结果[已拆分奇数列表, 已拆分偶数列表] - 判断当前第一个元素的奇偶性:奇数就插入到已拆分奇数列表的头部,偶数就插入到已拆分偶数列表的头部,保证最终元素顺序和原列表一致
- 返回处理后的嵌套列表即可
- 先取出当前列表的第一个元素,把剩余的子列表传入
可运行Python实现代码
def oddevenseparator(lst): # 递归终止条件 if not lst: return [[], []] # 递归处理剩余子列表 odd, even = oddevenseparator(lst[1:]) # 处理当前元素 if lst[0] % 2 == 1: return [[lst[0]] + odd, even] else: return [odd, [lst[0]] + even]
直接运行上述代码,即可完全匹配给出的三个示例输出。
内容的提问来源于stack exchange,提问作者Saran Kota
相关产品推荐
相关产品推荐

