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

Colab中Python列表赋值为空不生效,如何正确清空后填充平均值

问题原因及解决方案

问题根源

  • 代码执行顺序错误:你先执行了cents=[]清空列表,但紧接着在调用函数之前就执行了cents=[cent1,cent2,cent3],直接将刚清空的列表重新赋值为旧的原始数据,清空操作被覆盖,等于没有生效。
  • 操作逻辑顺序颠倒:你把print(cents)、cents赋值、转数组的操作都放在了调用avg_and_assign函数之前,函数还没执行,新的平均值还没有计算写入,第一次打印的自然是旧数据,调用函数后追加了新值,就出现了新旧数据叠加的情况。
  • 补充说明:Colab的变量是会话级全局生效的,只要运行过的代码块定义的变量都会保存在当前会话中,不存在清空操作只能在同个代码块生效的说法。

解决方案

调整代码的执行顺序,删掉多余的旧值赋值语句即可,修正后的参考代码如下:

import numpy as np

# 先定义计算函数
def avg_and_assign(list_1, list_2, list_3):
    alc1=np.array(list_1)
    alc2=np.array(list_2)
    alc3=np.array(list_3)
    alc1_mean=np.mean(alc1, axis=0)
    alc2_mean=np.mean(alc2, axis=0)
    alc3_mean=np.mean(alc3, axis=0)
    alc1_mean1=alc1_mean[0:4]
    alc2_mean1=alc2_mean[0:4]
    alc3_mean1=alc3_mean[0:4]
    cent1=np.ndarray.tolist(alc1_mean1)
    cent2=np.ndarray.tolist(alc2_mean1)
    cent3=np.ndarray.tolist(alc3_mean1)
    cents.append(cent1)
    cents.append(cent2)
    cents.append(cent3)

# 清空原有列表
cents = []
# 调用函数写入新的平均值
avg_and_assign(avg_list_cent1, avg_list_cent2, avg_list_cent3)
# 后续操作
cent_array=np.array(cents)
print(cents)

如果想避免全局变量的潜在问题,也可以调整函数直接返回结果,写法更安全简洁:

def calc_avg(list_1, list_2, list_3):
    alc1=np.array(list_1)
    alc2=np.array(list_2)
    alc3=np.array(list_3)
    alc1_mean=np.mean(alc1, axis=0)[0:4].tolist()
    alc2_mean=np.mean(alc2, axis=0)[0:4].tolist()
    alc3_mean=np.mean(alc3, axis=0)[0:4].tolist()
    return [alc1_mean, alc2_mean, alc3_mean]

cents = calc_avg(avg_list_cent1, avg_list_cent2, avg_list_cent3)
cent_array = np.array(cents)
print(cents)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:06:04