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))
修改说明
- 把所有可变类型的默认参数从
[]改成None,避免函数定义时创建固定的列表对象 - 在函数开头判断,若参数为
None就初始化新的空列表。这样每次调用函数时,只要没传对应参数,都会得到全新的空列表,不会和之前调用的列表复用 - 原代码里
if dates is not None和if total is not None的判断可以去掉,因为我们已经初始化了空列表,直接追加即可;如果调用时传了自定义列表,也会正常使用传入的列表
内容的提问来源于stack exchange,提问作者bdclercq
相关产品推荐
相关产品推荐

