我有一个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?
答案 0 :(得分:3)
使用相应元素的比较,比较元组和列表按字典顺序。 ...
定义自己的比较函数。
>>> 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)
假设您的lower
和upper
绑定以及您的观点是三元组,请尝试以下操作:
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,因为您的观察结果都是错误的。