如何按顺序筛选Python列表正数?解决输出顺序颠倒问题
问题分析与解决
你的代码出现顺序颠倒的核心原因是遍历方式错误:你在for i in list中把i当成了列表的索引,但实际上i是列表中的元素本身。当i是负数时,Python会从列表末尾反向索引,导致你先取到了列表末尾的正数,最终顺序颠倒。
比如原列表[-1,-2,-3,-4,0,1,2,3],循环时i依次是-1、-2、-3、-4:
list[-1]取的是列表最后一个元素3,满足>=0,被添加到flistlist[-2]取的是倒数第二个元素2,被添加list[-3]取的是1,被添加list[-4]取的是0,被添加
而后续i为0、1、2、3时,list[i]对应的是原列表前几个负数(list[0]是-1,list[1]是-2等),不满足条件,所以不会被添加,最终得到[3,2,1,0]。
修正后的代码
def filter_positive(lst): flist = [] for num in lst: if num >= 0: flist.append(num) return flist lst = [-1,-2,-3,-4,0,1,2,3] print(filter_positive(lst))
关键修正点
- 直接遍历列表元素
num,而非错误地将元素当作索引使用 - 避免使用
list作为变量名(这会覆盖Python内置的list类型) - 省略多余的
else: continue,不满足条件时自然会跳过循环
运行修正后的代码,输出就是你期望的[0,1,2,3]。
内容的提问来源于stack exchange,提问作者Wood
相关产品推荐
相关产品推荐

