0

我有一个 3D 坐标元组 (x, y, z)。我想测试给定元组的 3 个坐标中没有一个低于 (a, b, c) 并且没有一个高于 (d, e, f)。通过试验、错误和阅读这些论坛,我了解到:

(a, b, c) <= (x, y, z) <= (d, e, f)

在第一个表达式求值时不起作用,然后获取该结果(0 或 1)并在下一次求值中使用它,依此类推。所以现在我尝试了:

((a, b, c) <= (x, y, z)) 和 ((x, y, z) <= (d, e, f))

这也不起作用,因为当它在三个配对比较(a、x;b、y;c、z 等)中的任何一个中达到 True 时,结果为 True。因此,元组比较更像十进制值,而不是三个单独的标量变量。我需要所有三个配对比较(总共六个)的任何失败来产生一个错误的结果,而不是任何成功产生一个真。

我希望有一个像 a <= b <= c 这样简单的方法。使用仅在所有成对比较通过时才产生 True 的元组执行此操作的简单方法是什么?

4

3 回答 3

3

根据Expression - Comparison

元组和列表使用对应元素的比较按字典顺序进行比较。...

定义自己的比较函数。

>>> def lte(x, y):
...     return all(a <= b for a, b in zip(x, y))
... 
>>> lte((1,2,3), (2,3,4))
True
>>> lte((1,2,3), (0,3,4))
False
>>> lte((1,2,3), (2,3,4)) and lte((2,3,4), (3,4,5))
True
>>> lte((1,2,3), (2,3,4)) and lte((2,3,4), (3,2,5))
False
于 2013-10-07T09:49:24.003 回答
3

假设你的lowerupperbound 以及你的 point 是三元组,试试这个:

lower = 1,2,3
upper = 5,2,7
xyz = 2,3,4

all(u <= j <= v for u, j, v in zip(lower, xyz, upper))

或者只是单独比较它们:

(a <= x <= d) and (b <= y <= e) and (c <= z <= f)
于 2013-10-07T09:49:51.930 回答
1

通过试验、错误和阅读这些论坛,我了解到 [...] 不起作用...

但它确实如此,因为 Python 链接了关系运算符。

>>> 3 < 4 < 5
True
>>> 5 > 4 > 3
True

这也不起作用,因为当它在三个配对比较中的任何一个中达到 True [...] 时,它会导致 True。

除了 Python 比较两个序列操作数(相同类型)中的所有元素。

>>> (1, 2, 3) >= (1, 2, 4)
False

请确认您实际上使用的是 Python,因为您的两个观察结果都是错误的。

于 2013-10-07T09:51:39.797 回答