我知道and和or表达式存在于python中,但有任何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("â")
Run Code Online (Sandbox Code Playgroud)
有了这个,我的意思是如果用户输入"a"并且先前定义的列表中包含任何类型的"a",我可以从给定列表中删除所有类型的"a"吗?
python告诉我有一个问题:
someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")
Run Code Online (Sandbox Code Playgroud)
他告诉我: ValueError: list.remove(x): x not in list
sen*_*rle 38
正如Matt Ball的回答所解释的那样,or 是 "和/或".但or不适用于in您在上面使用它的方式.你不得不说if "a" in someList or "á" in someList or....或者更好,
if any(c in someList for c in ("a", "á", "à", "ã", "â")):
...
Run Code Online (Sandbox Code Playgroud)
这就是你提出的问题的答案.
但是,对于您发布的示例代码,还有一些事情要说.首先,someList.remove... or someList remove...此处的语句链是不必要的,并且可能导致意外行为.它也很难读!最好将其划分为单独的行:
someList.remove("a")
someList.remove("á")
...
Run Code Online (Sandbox Code Playgroud)
然而,即使这还不够.如您所见,如果项目不在列表中,则会引发错误.最重要的是,使用remove非常慢,因为每次调用它时,Python都必须查看列表中的每个项目.因此,如果要删除10个不同的字符,并且列表中包含100个字符,则必须执行1000次测试.
相反,我建议采用一种截然不同的方法.使用a过滤列表set,如下所示:
chars_to_remove = set(("a", "á", "à", "ã", "â"))
someList = [c for c in someList if c not in chars_to_remove]
Run Code Online (Sandbox Code Playgroud)
或者,在不创建副本的情况下就地更改列表:
someList[:] = (c for c in someList if c not in chars_to_remove)
Run Code Online (Sandbox Code Playgroud)
这些都使用列表理解语法来创建新列表.他们查看每个角色someList,查看角色是否在chars_to_remove,如果不是,则在新列表中包含角色.
这是此代码的最有效版本.它有两个速度优势:
someList一次.在上面的场景中,它不执行1000次测试,而是仅执行100次.chars_to_remove是一个set.如果它chars_to_remove是一个list或tuple,然后每个测试真的会在上述情况下10次试验-因为在列表中的每个字符将需要单独检查.小智 14
x and y如果两者都是x,y则返回true true.
x or y如果任何一个都返回true.
由此我们可以得出结论,除非你的意思是否or包含and在内xOR(或者除非and是真的)
| 归档时间: |
|
| 查看次数: |
393150 次 |
| 最近记录: |