You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让函数作用于每个子列表?质数分解嵌套列表实现问题

解决质数分解嵌套列表生成问题

嘿,我来帮你搞定这个问题!你的代码现在只输出最后一个子列表的正确分解结果,核心问题出在全局列表P的复用变量名冲突上,咱们一步步来修正:

先拆解现有代码的问题

  1. 全局P未重置:你在开头定义的P = []是全局变量,每次处理新数字时都没清空它,导致之前的分解因子一直累积,最后所有子列表的第二个元素都指向同一个P,自然只会显示最后一次的分解结果。
  2. 循环变量名重复:外层循环用了x,内层循环又用x,这会覆盖外层的x值,直接打乱了遍历逻辑。
  3. 输出范围错误:最后只打印了S[0],没有输出完整的最终列表L

修正后的代码(封装成函数更易用)

def generate_prime_factor_list(n):
    final_list = []
    # 遍历2到n的每个数字
    for num in range(2, n + 1):
        # 初始化当前数字的子列表:[数字本身, 质数分解结果列表]
        current_sub = [num, []]
        temp_num = num  # 用临时变量保存数字,避免修改原num的值
        divisor = 2
        # 执行质数分解逻辑
        while temp_num > 1:
            # 找到能整除的最小质数,重复除直到无法整除
            while temp_num % divisor == 0:
                current_sub[1].append(divisor)
                temp_num = temp_num // divisor
            divisor += 1
        final_list.append(current_sub)
    return final_list

# 测试n=10的场景
print(generate_prime_factor_list(10))

关键修改点说明

  • 移除全局P:直接在每个数字的循环中操作对应子列表的第二个元素,每个数字的分解结果都是独立的,不会互相干扰。
  • 避免变量冲突:外层用num,内层用divisortemp_num,变量职责清晰,不会出现值被覆盖的问题。
  • 封装为函数:可以直接传入任意n值调用,返回完整的嵌套列表,更符合Python的编程习惯,也方便复用。

运行这段代码,当n=10时,就能得到你想要的结果:

[[2,[2]],[3,[3]],[4,[2,2]],[5,[5]],[6,[2,3]],[7,[7]],[8,[2,2,2]],[9,[3,3]],[10,[2,5]]]

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

火山引擎 最新活动