Упрощение нескольких условий в Python - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу выбрать несколько элементов в одном прямоугольном поле с ограничениями по оси (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 ]

0 голосов
/ 13 декабря 2018

Если вы действительно хотите начать готовить на газе, создайте библиотеку классов для обработки трехмерных точек (например, расширив эту, чтобы включить координату 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)
0 голосов
/ 13 декабря 2018

Типичный случай для цепочки операторов :

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

Это не только упрощает сравнения, позволяет удалить скобки, сохраняя читабельность, но и центрАргумент оценивается только один раз , что особенно интересно при сравнении с результатом функции:

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

(поэтому это не эквивалентно 2 сравнениям, если func имеет побочный эффект)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...