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

Python列表append操作异常:重复追加数据问题求助

问题排查与解决方法

问题根源

你遇到的重复追加问题,是Python默认参数的常见坑:可变对象(比如列表)作为默认参数时,会在函数定义时就创建一次,之后每次调用函数如果没传该参数,都会复用这个已存在的对象。

你的代码里percentages: []和absolute: []用空列表做默认参数,第一次调用时往这个列表里加了12个元素,第二次调用没传这两个参数,就继续往同一个列表里追加数据,最终变成24个元素。

修复后的代码

def group_df(df1, df2, percentages=None, absolute=None, total=None, dates=None):
    # 初始化空列表,若参数为None则创建新列表
    percentages = percentages or []
    absolute = absolute or []
    total = total or []
    dates = dates or []
    
    for key, item in df1:
        print(key)
        fire_len = len(df1.get_group(key).index)
        total_len = len(df2.get_group(key).index)
        percentage = (fire_len / total_len) * 100
        percentages.append(percentage)
        absolute.append(fire_len)
        dates.append(key)
        total.append(total_len)

        print(len(percentages), len(absolute))

修改说明

  1. 把所有可变类型的默认参数从[]改成None,避免函数定义时创建固定的列表对象
  2. 在函数开头判断,若参数为None就初始化新的空列表。这样每次调用函数时,只要没传对应参数,都会得到全新的空列表,不会和之前调用的列表复用
  3. 原代码里if dates is not None和if total is not None的判断可以去掉,因为我们已经初始化了空列表,直接追加即可;如果调用时传了自定义列表,也会正常使用传入的列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:36:04