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

时间:2014-02-14 16:45:43

标签: python conditional tuples

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

我能想到的最好的事情是:

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

有没有更好的方法来编写条件?

2 个答案:

答案 0 :(得分:8)

不,没有专门的语法,使用链式比较是正确的方法。

我能提供的'精确'是首先使用元组解包,但这只是可读性结冰:

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

如果您使用collection.namedtuple()生成的元组子类,您当然也可以使用此处的属性:

from collections import namedtuple

range_tuple = namedtuple('range_tuple', 'low high')
t = range_tuple(1, 2)

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

答案 1 :(得分:1)

你可以制作自己的糖:

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