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

如何缩短输出Collatz猜想序列的Python函数?

精简Collatz猜想序列生成函数

我写了一段基于Collatz猜想生成序列的Python代码,想尽可能精简它,请问有什么方法?

原代码:

def collatz(n):

    seq = []
    n = int(n)

    if n == 0:
        return 
    
    elif n == 1:
        return seq + [n]
    
    elif n > 1 == True and n % 2 == 0:
        return seq + [n] + collatz(n/2)
    
    else:
        return seq + [n] + collatz(3*n+1)

print(collatz(7))

输出:

[7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

精简思路及优化后的代码

原代码存在冗余变量、无效条件判断等问题,可通过以下方式精简:

版本1:兼顾可读性与精简度

def collatz(n):
    n = int(n)
    if n <= 0:
        return []
    return [n] + collatz(n//2 if n%2==0 else 3*n+1) if n != 1 else [1]

版本2:极致精简(一行lambda函数)

collatz = lambda n: [] if int(n)<=0 else [int(n)]+collatz(int(n)//2 if int(n)%2==0 else 3*int(n)+1) if int(n)!=1 else [1]

核心优化点:

  • 移除冗余的seq变量:直接用[n]拼接递归结果,无需空列表过渡
  • 合并边界条件:将n==0扩展为n<=0并统一返回空列表,避免返回None的不一致情况
  • 替换浮点除法:用整数除法//替代/,确保递归时始终传递整数类型
  • 简化分支逻辑:用三元表达式合并奇偶判断和终止条件,减少代码行数

测试优化后的代码:

print(collatz(7))  # 输出:[7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:19