Python3中链式使用'in'关键字的两段代码是否存在差异?
两段Python代码的差异分析
这两段代码存在本质逻辑差异,具体区别如下:
第一段代码的逻辑问题
代码:
arr = ['a', 'ab', 'abc', 'b', '1', 'c'] if 'a' and 'b' and 'c' in arr: print(True)
由于Python运算符优先级,in的优先级高于and,所以实际执行顺序是:('a') and ('b') and ('c' in arr)
非空字符串在布尔上下文里会被判定为True,因此'a'和'b'都等价于True,最终条件简化为仅判断'c'是否在arr中。哪怕arr里没有'a'或'b',只要有'c',就会打印True。
比如修改arr为['c'],这段代码依然会输出True,显然不符合“同时检查a、b、c都存在”的预期。
第二段代码的正确逻辑
代码:
arr1 = ['a', 'ab', 'abc', 'b', '1', 'c'] if 'a' in arr1 and 'b' in arr1 and 'c' in arr1: print(True)
这段代码的逻辑是分别检查'a'、'b'、'c'三个元素是否都存在于arr1中,只有当三者同时存在时,才会执行print(True)。如果arr1里缺少其中任意一个元素,条件都会不成立,不会打印内容。
内容的提问来源于stack exchange,提问作者Infernalissss
相关产品推荐
相关产品推荐

