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

时间:2013-10-07 09:40:26

标签: python comparison tuples

我有一个3D坐标元组(x,y,z)。我想测试一个给定元组的3个co-ors中没有一个低于(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。因此,元组比较更像是十进制值而不是三个单独的标量变量。我需要所有三对比较(总共六个)中的任何一个失败来产生一个假结果,而不是产生一个True的任何成功。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

假设您的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)

答案 2 :(得分:1)

  

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

除此之外,因为Python链接了关系运算符。

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

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

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

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

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