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
相关产品推荐
相关产品推荐

