Python 元组比较不适用于多个小于,大于



我有一个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。因此,元组比较的工作方式更像是十进制值,而不是三个单独的标量变量。我需要所有三个配对比较(总共六个(的任何失败来产生 False 结果,而不是任何成功才能产生 True。

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

假设你的lowerupper绑定以及你的点是三元组,试试这个:

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)

根据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

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

除了它,因为Python链接关系运算符。

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

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

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

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

请验证您实际上正在使用 Python,因为您的两个观察结果都是错误的。

最新更新