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

Python循环中append列表不生效:找零算法仅重复添加最后一种组合

问题成因

Python 中的列表属于可变引用类型,你的代码全程仅初始化了1个way列表实例,后续所有循环都是直接修改这个实例的内部元素。执行way_list.append(way)时,实际存入列表的是这个way实例的内存引用,而非当前的元素值快照。因此每次修改way的元素,way_list里所有已存入的引用指向的内容都会同步更新,循环结束后所有引用都指向最终被改写为[1, 0, 0, 0]的同一个实例,所以看起来全是重复的最后一个结果,去重逻辑自然也无法生效。

修复方案

只需要保证每次存入way_list的是独立的列表对象即可,同时你当前的遍历逻辑天然不会生成重复组合,冗余的去重代码可以直接删除,大幅提升执行效率。

修改后的可运行代码如下:

QUARTER = 25
DIME = 10
NICKEL = 5
PENNIE = 1

def makeChange(value):
    way_list = []
    for q_q in range((value // QUARTER) + 1):
        value_after_Q = value - q_q * QUARTER
        for d_q in range((value_after_Q // DIME) + 1):
            value_after_D = value_after_Q - d_q * DIME
            for n_q in range((value_after_D // NICKEL) + 1):
                value_after_N = value_after_D - n_q * NICKEL
                p_q = value_after_N // PENNIE
                # 每次循环新建独立的列表对象
                way = [q_q, d_q, n_q, p_q]
                way_list.append(way)
    return way_list

print(makeChange(25))

如果你不想改动原有way的初始化逻辑,也可以在append时传入拷贝实现相同效果:
way_list.append(way.copy()) 或者 way_list.append(way[:])

内容的提问来源于stack exchange,提问作者Victor Hugo Leme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:04