Python 3中for循环内append函数失效问题求助
听起来你遇到的问题有点棘手——循环里的append没起作用,连后续的print都没执行,还没报错,这大概率是循环根本没跑起来,或者代码缩进/变量出了问题。我给你梳理几个最可能的原因和对应的解决办法:
1. 缩进错误(最常见)
Python靠缩进区分代码块,要是你的append或者循环体没正确缩进,循环相当于空转,啥也不会做。甚至连循环定义后的冒号都不能漏,否则程序直接语法报错(不过你说没报错,可能是缩进问题)。比如错误写法:
timestamps = [1620000000, 1630000000, 1640000000] indices = [0, 2] new_list = [] for idx in indices new_list.append(timestamps[idx]) # 没缩进,不属于循环体 print(new_list)
修正后:
timestamps = [1620000000, 1630000000, 1640000000] indices = [0, 2] new_list = [] for idx in indices: # 别忘了加冒号 new_list.append(timestamps[idx]) # 缩进后才属于循环体 print(new_list) # 确保和for循环同级,不在循环内部
2. 循环的迭代对象为空
如果你的索引列表indices是空的,循环根本不会进入,自然不会执行append。要是后续print的是循环生成的列表,就会输出空列表,看起来像没执行过循环。比如:
indices = [] # 空列表 for idx in indices: print("循环执行了") # 这句话永远不会打印
检查点:先单独打印indices和timestamps,确认它们不是空的,且索引值都在timestamps的有效范围内(比如索引不能大于等于len(timestamps))。
3. 程序在循环前就阻塞了
如果循环前面的代码有死循环、耗时操作或者输入阻塞(比如input()没得到输入),程序根本没走到循环这一步,自然print也不会执行。比如:
# 这里有个死循环,后面的代码永远跑不到 while True: pass timestamps = [...] indices = [...] for idx in indices: ...
检查点:在循环前加一句测试代码print("准备进入循环了"),看看这句话会不会打印。如果没打印,说明前面的代码卡住了。
4. 变量名拼写错误
比如你创建的新列表是new_timestamps,但append的时候写成了new_timestamp(少了个s),这样相当于在循环里创建了一个新的局部变量,而你最后打印的是原来的空列表。比如:
new_timestamps = [] for idx in indices: new_timestamp.append(timestamps[idx]) # 变量名拼写错误! print(new_timestamps) # 输出空列表
检查点:确认所有变量名拼写一致,用IDE的语法高亮功能能快速发现这类问题,也可以打印变量的id()看看是不是同一个对象。
如果还是解决不了,建议把完整的代码贴出来(去掉敏感信息),这样能更精准地定位问题!
内容的提问来源于stack exchange,提问作者Lorcank11

