如何用Python递归实现奇数在前、偶数在后的列表复制?
递归实现奇偶分拆列表的问题拆解与代码补全
问题拆解成这几个小模块:
- 终止条件处理:当输入列表为空时,直接返回空列表(你已经写好这部分了)。
- 单个元素判断:检查列表的第一个元素是奇数还是偶数。
- 递归子问题:对列表除第一个元素外的剩余部分,递归调用当前函数,得到已经分好奇偶的子列表。
- 结果合并:根据第一个元素的奇偶性,把它放到子问题结果的对应位置——奇数放前面,偶数放后面。
补全后的代码:
def oddsevens(thelist): if thelist == []: return [] if thelist[0] % 2 == 0: # 偶数:放到递归子列表结果的末尾 return oddsevens(thelist[1:]) + [thelist[0]] else: # 奇数:放到递归子列表结果的开头 return [thelist[0]] + oddsevens(thelist[1:])
验证示例:
输入[3,4,5,6]时,执行流程是:
- 第一个元素3是奇数,调用
oddsevens([4,5,6])并把3放在结果前面。 - 处理
[4,5,6],第一个元素4是偶数,调用oddsevens([5,6])并把4放在结果后面。 - 处理
[5,6],第一个元素5是奇数,调用oddsevens([6])并把5放在前面。 - 处理
[6],第一个元素6是偶数,调用oddsevens([])得到空列表,把6加到后面,返回[6]。 - 回溯合并:
[5] + [6]→[5,6];接着[5,6] + [4]→[5,6,4];最后[3] + [5,6,4]→[3,5,6,4],和预期一致。
内容的提问来源于stack exchange,提问作者Ming
相关产品推荐
相关产品推荐

