正如Matt Ball的回答所解释的,
or是“和/或”。但
or不适
in用于您上面使用它的方式。你不得不说
if "a" in someList or "á" in someListor...。还是更好
if any(c in someList for c in ("a", "á", "à", "ã", "â")): ...这就是您所问问题的答案。
其他注意事项
但是,关于您发布的示例代码,还有更多要说的话。首先,
someList.remove... or someListremove...这里的语句链是不必要的,并且可能导致意外的行为。这也很难读!最好将其分成几行:
someList.remove("a")someList.remove("á")...但是,仅此还不够。正如您所观察到的,如果该项目不在列表中,则将引发错误。最重要的是,使用
remove非常缓慢,因为每次调用它时,Python都必须查看列表中的每个项目。因此,如果要删除10个不同的字符,并且有一个包含100个字符的列表,则必须执行1000个测试。
相反,我建议一种非常不同的方法。使用过滤列表
set,如下所示:
chars_to_remove = set(("a", "á", "à", "ã", "â"))someList = [c for c in someList if c not in chars_to_remove]或者,就地更改列表而不创建副本:
someList[:] = (c for c in someList if c not in chars_to_remove)
它们都使用列表理解语法来创建新列表。他们查看中的每个字符
someList,检查其中的字符
chars_to_remove,如果不是,则将字符包括在新列表中。
这是此代码的最有效版本。它具有两个速度优势:
- 它只通过
someList
一次。在上述情况下,它没有执行1000个测试,而是仅执行100个。 - 它可以用一个操作测试所有的字符,因为
chars_to_remove
是一个set
。如果它chars_to_remove
是list
或tuple
,那么在上述情况下每个测试实际上将是10个测试-因为列表中的每个字符都需要单独检查。



