gpt4 book ai didi

python - Python中的和/或?

转载 作者:IT老高 更新时间:2023-10-28 21:41:47 26 4
gpt4 key购买 nike

我知道python中存在andor表达式,但是有没有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

最佳答案

作为 Matt Ball的答案解释说,or is “和/或”。但是 or 不能像您上面使用的那样与 in 一起使用。你必须说 if "a"in someList 或 "á"in someList 或...。或者更好,

if any(c in someList for c in ("a", "á", "à", "ã", "â")):
...

这就是您所问问题的答案。

其他说明

但是,对于您发布的示例代码,还有一些话要说。首先,这里的 someList.remove... 或 someList remove... 语句链是不必要的,可能会导致意外行为。也很难读!最好把它分成几行:

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 中,如果不是,则将该字符包含在新列表中。

这是这段代码最有效的版本。它有两个速度优势:

  1. 它只经过一次someList。在上述场景中,它只执行 100 次,而不是执行 1000 次测试。
  2. 它可以通过一次操作测试所有字符,因为 chars_to_remove 是一个 set。如果 chars_to_removelisttuple,那么在上述场景中,每个测试实际上是 10 个测试——因为列表中的每个字符需要单独检查。

关于python - Python中的和/或?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com