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

Python for循环追加列表元素无法正确输出单个结果列表的问题

问题说明

你的代码有两处基础逻辑问题:

  • 打印语句位置错误:你把print放在了循环内的条件分支里,每追加一个符合条件的元素就会打印一次当前列表。x=100时第一次追加2100打印[2100],第二次追加4200打印[2100,4200],自然会输出两行结果。
  • 函数缺少返回值:Python函数如果没有写显式return语句,执行完成后默认返回None,你把print移到函数外时拿到None,就是因为调用函数没有获取到内部构建的列表对象。
    另外注意不要用list做变量名,这是Python内置列表类型的保留名称,用作变量会覆盖原生列表的构造方法,属于不规范的编码习惯。
修复代码

把打印逻辑移到循环全部执行完成之后,加上return语句返回最终构建的列表即可:

def inrange(x):
    result = []
    for num in range(1000, 5001):
        if num % x == 0 and num % (x + 5) == 0:
            result.append(num)
    print(result)
    return result

inrange(100)

运行后会直接输出你预期的[2100, 4200],如果需要在函数外部使用这个列表,用变量接收函数返回值即可,比如res = inrange(100),不会再拿到None值。

可选效率优化

实际上不需要遍历区间内的所有数字:能同时被x和x+5整除的数,一定是两者最小公倍数的倍数,可以通过最大公约数快速计算最小公倍数,直接生成目标列表,减少不必要的循环判断:

import math

def inrange(x):
    # 计算x和x+5的最小公倍数
    common_divisor = math.gcd(x, x + 5)
    common_multiple = x * (x + 5) // common_divisor
    # 找到区间内第一个符合条件的数
    first = ((1000 + common_multiple - 1) // common_multiple) * common_multiple
    # 以最小公倍数为步长直接生成列表
    result = list(range(first, 5001, common_multiple))
    print(result)
    return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:06:25