我知道python中存在and
和or
表达式,但是是否有and/or
表达式?或者通过某种方式将它们组合起来以产生与and/or
表达式相同的效果?
我的代码如下:
if input=="a":
if "a" or "á" or "à" or "ã" or "â" in someList:
someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")
这样,我的意思是,如果用户输入“a”,并且任何类型的“a”包含在先前定义的列表中,那么我可以从给定列表中删除所有类型的“a”吗?
python告诉我:
someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")
他告诉我:ValueError: list.remove(x): x not in list
如果
x
和y
都是true
,则x and y
返回true。x or y
如果其中一个是true
,则返回。由此我们可以得出结论,
or
在其内部包含and
,除非您是指xOR
(或者and
是真的)正如Matt Ball的答案所解释的,
or
是“和/或”。但是or
不能像上面那样使用in
。你得说if "a" in someList or "á" in someList or...
。或者更好这就是你所问问题的答案。
其他注释
但是,对于您发布的示例代码,还有一些事情要说。首先,这里的
someList.remove... or someList remove...
语句链是不必要的,可能会导致意外的行为。也很难读!最好把它分成几行:然而,即使这样也不够。如您所观察到的,如果该项不在列表中,则会引发错误。除此之外,使用
remove
非常慢,因为每次调用它时,Python都必须查看列表中的每个项。因此,如果要删除10个不同的字符,并且有一个包含100个字符的列表,则必须执行1000个测试。相反,我建议采用一种完全不同的方法。使用
set
筛选列表,如下所示:或者,在不创建副本的情况下更改列表:
它们都使用列表理解语法来创建新的列表。他们查看
someList
中的每个字符,查看chars_to_remove
中的字符,如果不是,则将该字符包含在新列表中。这是此代码的最有效版本。它有两个速度优势:
someList
一次。在上面的场景中,它只执行100个测试,而不是执行1000个测试。chars_to_remove
是一个set
。如果chars_to_remove
是list
或tuple
,那么在上述场景中,每个测试实际上是10个测试——因为列表中的每个字符都需要单独检查。or
不是独占的(例如^{or
与and/or
是同一回事。相关问题 更多 >
编程相关推荐