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

Python列表追加逻辑疑问:变量c为何影响列表b的内容?

筛选末尾为0的整数:代码逻辑解析与优化

你的问题

你生成了包含0到500所有整数的列表y,想要筛选出末尾数字为0的数,但搞不懂现有代码里变量c的作用——只有当c初始值为0时,列表b才会得到符合要求的数;修改c的初始值或者移除它,b就只会追加固定值或错误值。

你的代码

x = 0
y = []
while x <= 500:
    y.append(x)
    x = x + 1

a = 0
b = []
c = 0
# if i remove c from this or change c from 0 to 1 or any other number it just appends with that value
# but if c is as i have it, it some how appends the list with the values i am pulling with my if statment
while a <= 500:
    if int(repr(y[a])[-1]) == 0:
        b.append(c) 
    a = a + 1
    c = c + 1

print(len(b))
print(b)

代码逻辑拆解

  1. 生成列表y的部分:
    这段逻辑很直白,用while循环从0递增到500,把每个数依次加入y,最终y就是[0, 1, 2, ..., 500],且y[a]和a的值完全相等(比如y[0]=0,y[10]=10)。

  2. 筛选部分的核心逻辑:

    • a是遍历y的索引,从0到500;c初始值为0,每次循环a和c都会同时加1,所以c和a的值始终完全相等。
    • 条件int(repr(y[a])[-1]) == 0是把y[a]转成字符串后取最后一位,判断是否为0(也就是判断y[a]末尾是否为0)。当条件满足时,你执行b.append(c),而因为c=a=y[a],所以实际上是把符合要求的y[a]加入了b,这才得到了你想要的结果。
  3. 为什么修改/移除c会出错:

    • 如果把c的初始值改成1,那么c永远比a大1,满足条件时append(c)就会加入a+1,而不是y[a],结果全错;
    • 如果移除c,你大概率会把append(c)改成某个固定值(比如append(0)),或者代码报错后随便填了个固定数,导致b里全是同一个值。

更简洁高效的写法

你的代码绕了弯路,其实有更直观的方式筛选末尾为0的数(末尾为0的数都是10的倍数,用取余运算%就能判断):

方法1:列表推导式(推荐)

# 直接生成0到500的列表,替代while循环
y = list(range(0, 501))
# 筛选出能被10整除的数
b = [num for num in y if num % 10 == 0]

print(len(b))
print(b)

方法2:while循环优化版

x = 0
y = []
while x <= 500:
    y.append(x)
    x += 1

b = []
a = 0
while a <= 500:
    current_num = y[a]
    # 用取余判断是否为10的倍数,比转字符串更高效
    if current_num % 10 == 0:
        b.append(current_num)
    a += 1

print(len(b))
print(b)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:20