Python全局列表无法追加值:调用列表返回空列表求助
问题排查与解决
核心原因:函数未被执行
如果只定义了Ocurrencias函数,但从未传入有效参数调用它(比如Ocurrencias(你的Datos数据)),那三个全局列表den、num_p、num_end自然会是空的。这是最常见的触发场景。
输入参数异常的情况
如果传入的Datos是空列表,或者每个元素分割后得到的episodios总长度小于4,第二个for循环(range(0, len(episodios)-3,4))会直接跳过,此时denominador、nominador_p、nominador_e会保持初始值0,但代码依然会把这三个0追加到列表中。如果连0都没出现,还是函数未被调用的问题。
验证方法
添加测试调用和打印语句,确认函数执行情况:
# 构造测试数据 test_datos = ["state1,play,play,10", "state2,continue,end,0"] # 调用函数 Ocurrencias(test_datos) # 打印列表查看结果 print(den, num_p, num_end)
额外优化建议
- 避免使用全局变量:全局变量会增加代码维护难度,建议将计算结果作为返回值,在调用时手动追加到列表:
def Ocurrencias(Datos): episodios = [] # 移除global声明 for item in Datos: x = item.split(',') episodios.extend(x) denominador = 0 nominador_p = 0 nominador_e = 0 for i in range(0, len(episodios)-3,4): denominador += 1 if 'play' in episodios[i+2]: nominador_p += 1 else: nominador_e += 1 x = f"Veces que ocurre (play, continue) : {denominador}" y = f"Veces que ocurre (play, continue, play) : {nominador_p}" z = f"Veces que ocurre (play, continue, end) : {nominador_e}" w = f"Probabilidad de (play, continue, play) : {nominador_p/denominador if denominador !=0 else 0} " # 返回计算结果 return x, y, z, w, denominador, nominador_p, nominador_e # 调用时处理列表 den = [] num_p = [] num_end = [] x,y,z,w,d,p,e = Ocurrencias(test_datos) den.append(d) num_p.append(p) num_end.append(e)
- 移除冗余代码:原代码中
episodios[i]、episodios[i+1]、episodios[i+3]这些行没有实际作用,可直接删除。 - 处理除零异常:添加判断避免
denominador为0时的报错。
内容的提问来源于stack exchange,提问作者Angel Panda
相关产品推荐
相关产品推荐

