如何简化多条件相等判断逻辑表达式?非in方式可行性问询
关于简化多值相等判断的问题
首先得泼个冷水:你想写的if x == (line[0] or line[1] or line[2] or line[3]):这种写法完全达不到你想要的效果,原因是Python里的or运算符是短路求值的——它会返回第一个“为真”的元素,而不是把所有元素当成一个匹配集合。举个例子,如果line = [1, 2, 3, 4],那line[0] or line[1] or ...的结果就是1,这时候只有x == 1会触发条件,其他值(比如2、3、4)都不会匹配,和你原本的逻辑(x等于四个中的任意一个)完全不符。
那有没有不用in的简化方式?当然有,推荐用any()函数配合生成器表达式,写法如下:
if any(x == elem for elem in line[:4]):
这个写法的逻辑和你原来的if x == line[0] or x == line[1] or ...完全一致:逐个检查x是否等于line的前四个元素,只要有一个匹配就返回True。而且比写一堆or简洁很多,可读性也更强。
如果你确实想先定义一个变量再判断,也可以把生成器表达式的逻辑封装一下:
matches_any = any(x == elem for elem in line[:4]) if matches_any: # 你的业务逻辑代码
另外补充一下:为什么不推荐硬凑or的写法?除了前面说的短路求值问题,就算所有元素都是“假值”(比如0、''、None),or的结果会是最后一个元素,同样只会匹配单一值,根本覆盖不了你想要的“任意一个匹配”的场景。
内容的提问来源于stack exchange,提问作者Traper279
相关产品推荐
相关产品推荐

