如何让函数作用于每个子列表?质数分解嵌套列表实现问题
解决质数分解嵌套列表生成问题
嘿,我来帮你搞定这个问题!你的代码现在只输出最后一个子列表的正确分解结果,核心问题出在全局列表P的复用和变量名冲突上,咱们一步步来修正:
先拆解现有代码的问题
- 全局
P未重置:你在开头定义的P = []是全局变量,每次处理新数字时都没清空它,导致之前的分解因子一直累积,最后所有子列表的第二个元素都指向同一个P,自然只会显示最后一次的分解结果。 - 循环变量名重复:外层循环用了
x,内层循环又用x,这会覆盖外层的x值,直接打乱了遍历逻辑。 - 输出范围错误:最后只打印了
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,内层用divisor和temp_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




