Python中多个条件语句的简化

6

我希望从一个具有坐标范围(xmin,xmax,ymin,ymax,zmin,zmax)的矩形框中挑选出一些物品。因此,我使用以下条件:

if not ((xi >= xmin and xi <= xmax) and (yi >= ymin and yi <= ymax) and (zi >= zmin and zi <= zmax)):
    expression 

但我认为Python有一些简洁的表达方式。有人能告诉我吗?

2个回答

14

操作符链的典型案例:

if not (xmin <= xi <= xmax and ymin <= yi <= ymax and zmin <= zi <= zmax):

它不仅简化了比较,允许去除括号,同时保持可读性,而且中心参数仅被评估一次,当与函数结果进行比较时特别有趣:

if xmin <= func(z) <= xmax:

因此,如果func具有副作用,则它不等同于2个比较。


1
@Gao 如果他们的回答解决了你的问题,请用绿色勾号标记它。 - Maximilian Burszley
@TheIncorrigible1 谢谢。我试图在那个页面上设置一个内部书签 :) - Jean-François Fabre
2
比较运算符在这种情况下不会联合使用; x <= y <= z 的评估方式类似于 x <= y and y <= z(但是 y 只被评估一次)。它不会简单地评估 x <= y 然后将结果与 z 进行比较。 - chepner
@chepner,这真的很有趣。感谢您的澄清。 - Ayxan Haqverdili
如果你执行(x <= y) <= z,那么你会得到你所寻找的混乱布尔效果。 - Jean-François Fabre
显示剩余2条评论

1
如果你真的想开始使用气体烹饪,可以创建一个处理三维点的类库(例如通过扩展这个类库来包含Z坐标:在Python中创建一个点类)。然后,你可以将上述解决方案封装成类的方法,如下所示:
def isInBox(self, p1, p2):
    return (p1.X <= self.X <= p2.X and p1.Y <= self.Y <= p2.Y and p1.Z <= self.Z <= p2.Z)

是的,我理解你的想法。谢谢。 - Gao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接