当前位置: 首页 > 面试题库 >

在Python中进行AND / OR?

叶鹭洋
2023-03-14
问题内容

我知道andandor表达式存在于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("â")

这样,我的意思是,如果用户输入“ 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 “和/或”。但or不适in用于您上面使用它的方式。你不得不说if "a" in someList or "á" in someList or...。还是更好

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

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

其他注意事项

但是,关于您发布的示例代码,还有更多要说的话。首先,someList.remove... or 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一次。在上述情况下,它没有执行1000个测试,而是仅执行100个。
  2. 它可以用一个操作测试所有的字符,因为chars_to_remove是一个set。如果它chars_to_removelisttuple,那么在上述情况下每个测试实际上将是10个测试-因为列表中的每个字符都需要单独检查。


 类似资料:
  • 问题内容: Spring Profile批注允许您选择配置文件。但是,如果您阅读文档,它仅允许您使用OR操作选择多个配置文件。如果指定@Profile(“ A”,“ B”),则在配置文件A或配置文件B处于活动状态时,您的bean都将启动。 我们的用例有所不同,我们要支持多种配置的TEST和PROD版本。因此,有时我们只想在概要文件TEST和CONFIG1都处于活动状态时才自动装配bean。 Spr

  • 问题内容: 在Python中scp文件的最pythonic方式是什么?我知道的唯一路线是 这是一种骇客,并且在类似Linux的系统之外不起作用,并且需要Pexpect模块的帮助来避免出现密码提示,除非你已经为远程主机设置了无密码的SSH。 我知道Twisted的,但是我希望避免通过低级ssh模块自己实现scp。 我知道,一个支持SSH和SFTP的Python模块;但它不支持SCP。 背景:我正在连

  • 问题内容: 我有一长行代码,我想在多行中分解。我使用什么,语法是什么? 例如,添加一串字符串, 并分成两行,如下所示: 问题答案: 线路是什么?你可以在下一行中使用参数而不出现任何问题: 否则,你可以执行以下操作: 查看样式指南以获取更多信息。 从示例行中: 要么: 请注意,样式指南指出,最好使用带括号的隐式连续符,但是在这种特殊情况下,仅在表达式周围加上括号可能是错误的方法。

  • 问题内容: 对于C ++,我们可以使用OpenMP进行并行编程。但是,OpenMP不适用于Python。如果要并行执行python程序的某些部分,该怎么办? 该代码的结构可以认为是: 其中和是两个独立的功能。为了减少运行时间,如何并行而不是按顺序运行这种代码?代码是: 其中和是两个独立的功能。那是我要平行的地方… 问题答案: 您可以使用多处理模块。对于这种情况,我可以使用一个处理池: 这将产生可以

  • 其中和是两个独立的函数。那就是我想平行的地方...

  • 问题内容: 我使用模块启动一个子流程并连接到它的输出流()。我希望能够在它的标准输出上执行非阻塞读取。在调用之前,是否有方法使不阻塞或检查流中是否有数据?我希望它是可移植的,或者至少在和下工作。 这是我目前的操作方式(如果没有可用数据,则会阻塞): 问题答案: ,,不会在这种情况下帮助。 不管使用什么操作系统,一种可靠的读取流而不阻塞的方法是使用: