Skip to main content
 首页 » 编程设计

python之过滤 Python 列表时出现意外输出 : What am I doing wrong

2025年05月04日11cmt

我正在尝试过滤列表,这是代码:

 test=['aaa','bbb','ccc','ddd','footer','header'] 
 
 def rm_hf(x): return x != 'footer' 
 
 filter(rm_hf,test) 

结果:

>>>['aaa','bbb','ccc','ddd','header'] 

这是预期的结果,在列表中找到“页脚”并将其删除。

现在我想删除“页眉”和“页脚”,所以我这样做:

 test2=['aaa','bbb','ccc','ddd','footer','header'] 
 
 def rm_hf2(x): return x != 'footer' or x != 'header' 
 
 filter(rm_hf2,test2) 

结果:

>>>['aaa','bbb','ccc','ddd','footer','header'] 

现在这很奇怪,它只给出'页脚','页眉'而不是过滤它们?

我做错了什么?我认为我的逻辑是正确的...

请您参考如下方法:

你的逻辑是正确的,因为你像人一样思考。你的电脑没有。他阅读了您列表中的每个元素,然后偶然发现了“页脚”。 “页脚与页脚不同吗?”,他说。 “不!这是同一个字符串!它被评估为假。让我们看看下一个条件”。 “页脚与页眉不同吗?是的!”因此,条件为 False 或 True,显然计算结果为 true。

你想要一个and,而不是or:

def rm_hf2(x): return x != 'footer' and x != 'header' 

您还可以使用元组和 in 关键字,这更具可读性:

def rm_hf2(x): return x not in ('footer', 'header') 

不过,了解“and”和“or”的真正含义很重要。老实说:如果某些东西没有按您认为的那样工作,问题很可能出在您自己的代码中,而不是出在 Python 语言本身。