Python 检查值是否在元组中的一对值之间?

Python 检查值是否在元组中的一对值之间?,python,conditional,tuples,Python,Conditional,Tuples,有没有一种有效的方法(漂亮的语法)来检查一个值是否在元组中包含的两个值之间 我能想到的最好的办法是: t = (1, 2) val = 1.5 if t[0] <= val <= t[1]: # do something t=(1,2) val=1.5 如果t[0]No,则没有专用语法,使用链式比较已经是正确的方法 我能提供的一个“优点”是首先使用元组解包,但这只是可读性: low, high = t if low <= val <= high: 你可以自己做

有没有一种有效的方法(漂亮的语法)来检查一个值是否在元组中包含的两个值之间

我能想到的最好的办法是:

t = (1, 2)
val = 1.5
if t[0] <= val <= t[1]:
    # do something
t=(1,2)
val=1.5

如果t[0]No,则没有专用语法,使用链式比较已经是正确的方法

我能提供的一个“优点”是首先使用元组解包,但这只是可读性:

low, high = t
if low <= val <= high:

你可以自己做糖:

class MyTuple(tuple):

    def between(self, other):
        # returns True if other is between the values of tuple 
        # regardless of order
        return min(self) < other < max(self)

        # or if you want False for MyTuple([2,1]).between(1.5)
        # return self[0] < other < self[1]

mt=MyTuple([1,2])    
print mt.between(1.5)
# True
类MyTuple(tuple):
def介于(自身、其他)之间:
#如果其他值介于元组值之间,则返回True
#不顾一切
返回最小值(自身)<其他<最大值(自身)
#或者如果希望MyTuple([2,1])在(1.5)之间为False
#返回自我[0]
链式条件句到底有什么问题?我能提供的唯一改进是首先对边界进行元组解包:
low,high=t
然后
如果low-Nothing,我想知道是否有语法糖来检查一个值是否在元组中的其他两个值之间。不,您已经在这里找到了语法。这是一个很好的python方法。这是一个聪明的主意,但是通过装饰来实现不是更好吗?-1:为这个简单的编程问题创建一个类。占用大量内存和CPU开销。@MaximeLorant:这似乎有点苛刻。所有这些都是对现有类
tuple
进行子类化,并添加他询问是否存在的函数。OP的需求是否值得对现有类进行子类化,这不是由OP决定的吗?Python中有很多东西不是很简单,因为有类吗?@dawg我发现Martijn的答案实际上更简洁(一如既往)。的确,它是一个现有类的子类,但它比仅仅解包createnamedtuple的2个元素要重(就可读性而言)。。。对于一些更复杂的操作,创建一个类是合理的,但是,我同意:-)@MaximeLorant:很好,Martin的答案很好。我投了更高的票。但是-1对于这个答案,你的评论有点苛刻。通过对Python类进行子类化,将您想要的语法添加到Python类中是非常有用的。这取决于行动。
class MyTuple(tuple):

    def between(self, other):
        # returns True if other is between the values of tuple 
        # regardless of order
        return min(self) < other < max(self)

        # or if you want False for MyTuple([2,1]).between(1.5)
        # return self[0] < other < self[1]

mt=MyTuple([1,2])    
print mt.between(1.5)
# True