Python列表遍历代码异常:非空列表赋值后无预期输出排查
问题原因
你写的while not my_list条件逻辑完全错误:
- 当
my_list = [1,2,3]时,not my_list等价于False,while循环直接跳过不执行,里面的打印语句和for循环根本没机会运行,所以没有任何输出。 - 原代码想实现“列表空时重复检查,非空时执行循环”的逻辑,但当前while条件只允许列表为空时进入循环,和需求完全相反。
解决方法
根据需求,有两种可行的修改方式:
方式一:持续检查直到列表非空
把while条件改为while True,在循环内部判断列表状态:
my_list = [1,2,3] # my_list = [] while True: if not my_list: print("Check Again") # 这里可以添加更新my_list的逻辑,比如从外部获取数据 else: for i in my_list: print("Loop ", i) break
不管初始列表是否为空,都会进入循环判断:空则打印检查提示,非空则执行循环并退出。
方式二:先处理空列表检查,再执行循环
如果不需要持续循环检查(比如只做一次检查),可以简化成:
my_list = [1,2,3] # my_list = [] while not my_list: print("Check Again") # 这里添加更新my_list的逻辑,比如my_list = [1,2,3] # 列表非空时执行循环 for i in my_list: print("Loop ", i)
这种写法下,若初始列表非空,while循环直接跳过,直接执行后面的for循环;若初始为空,则进入循环检查,直到列表被更新为非空后退出循环,再执行for循环。
内容的提问来源于stack exchange,提问作者S Venky
相关产品推荐
相关产品推荐

