代码之家  ›  专栏  ›  技术社区  ›  Akash Rathor

我不明白为什么在python中得到子串匹配的结果

  •  0
  • Akash Rathor  · 技术社区  · 4 年前

    x = 0
    y = 1
    z = 3
    mylist = []
    
    if x or y or z == 0 :
        mylist.append("c")
    if x or y or z == 1 :
        mylist.append("d")
    if x or y or z == 2 :
        mylist.append("e")
    if x or y or z == 3 : 
        mylist.append("f")
    

    将返回以下列表:

    ["c", "d", "f"]
    

    0 回复  |  直到 4 年前
        1
  •  0
  •   Abhishek Kumar Saw    4 年前

    你误解了布尔表达式的工作原理;它们不像英语句子那样工作,并且猜测你在这里谈论的是所有名称的相同比较。您正在寻找:

    if x == 1 or y == 1 or z == 1:
    

    x y 否则将自行评估( False 如果 0 , True

    你可以通过对 a tuple :

    if 1 in (x, y, z):
    

    或者更好的是:

    if 1 in {x, y, z}:
    

    使用 a set 利用固定成本成员资格测试( in

    当你使用 or 表达。表达式 x or y == 1 ,则如果该表达式为False y == 1 已测试。

    operator precedence . 这个 运算符的优先级低于 == 测试,所以对后者进行评估 第一 .

    然而,即使这是 案例和表达 x or y or z == 1 (x or y or z) == 1 相反,这仍然不会达到您期望的效果。

    x or y or z 将评估为第一个“真实”的论点,例如不 boolean expressions

    所以对于价值观 x = 2; y = 1; z = 0 , x或y或z 2 ,因为这是参数中的第一个类真值。那么 2 == 1 会是 ,尽管 y==1 是的 .

    x == 1 or 2 or 3 会因为同样的原因而失败。使用 x == 1 or x == 2 or x == 3 x in {1, 2, 3}