代码之家  ›  专栏  ›  技术社区  ›  mgoldwasser

Python如何评估or语句中的多个条件?

  •  10
  • mgoldwasser  · 技术社区  · 11 年前

    偶尔,我会遇到这样的问题:

    a = 'my string'
    if 'string1' in a or 'string2' in a or 'string3' in a ... or 'stringN' in a:
        [[do something]]
    else:
        [[something else]]
    

    假设我知道有90%的机会 'string1' in a 计算结果为 True 。如果 'string2' in a 在这种情况下 中的“string1” 真的 ? 或者从技术上讲,写:

    if 'string1' in a:
        [[do something]]
    elif 'string2' in a:
        [[do something]]
    elif 'string3' in a:
        [[do something]]
    ...
    elif 'stringN' in a:
        [[do something]]
    else:
        [[something else]]
    
    4 回复  |  直到 11 年前
        1
  •  24
  •   user2555451 user2555451    11 年前

    or and and both use short-circuiting ; 他们将只评估确定结果所需的条件。所以,如果 'string1' in a 回报 True , 'string2' in a 永远不会被触摸。

        2
  •  3
  •   Dunes    11 年前

    在这种情况下,或相持和if阶梯相当。应首选or语句,因为它可以减少代码重复。如果其中一个字符串在给定的字符串中,则只需更改一段代码即可。

    如果您有许多字符串要搜索,您可能会发现最好使用 any 函数和生成器。

    any(s in a for s in strings) 
    

    上面的求值结果与or语句相同,其中 strings 是您正在搜索的字符串的列表。它还会停止检查 s in a 第一次评估 True .

        3
  •  0
  •   GLHF    11 年前

    不,它将在求值时停止 True 。因为在 or 操作员,一个 真的 足以处理该语句。如果任何条件返回 真的 例如,在那里 string1 如果为True,则不会处理其他条件。正如你所知,除了 False or False 每个条件都是 真的 ,因此无需检查其余部分。

        4
  •  -1
  •   Rick SilentGhost    11 年前

    我知道这不是你的问题,但你应该考虑在这种情况下使用集合。

    而不是:

    if 'string1' in a or 'string2' in a or 'string3' in a ... or 'stringN' in a:
    

    您可以执行以下操作:

    if set(a.split()).intersection({'string1','string2', ... }):
    

    以这种方式使用集合比多条件if语句更简洁,速度更快。

    编辑:请注意,以上步骤仅用于检查单个单词之间是否存在空格。

    推荐文章