在if语句中为1到50之间的任何数字创建一个通配符整数

时间:2013-10-17 15:49:09

标签: python python-2.7

如何更改以下内容:

if key == (2, *) and (1, 1) in previous:

要使*变成1到50之间的任何数字(包括1到50)

我尝试过以下但是没有用......

if key == (2, range(1, 50)) and (1, 1) in previous:

还有其他想法吗?

3 个答案:

答案 0 :(得分:5)

如果a)可迭代previous包含等于(1,1)的元组,并且b)元组key等于{{1}中的任何一个,则以下情况都将成立: },(2,1),... (2,2)

(2,50)

如果范围内的元素数量非常大(1000或100,000),您可能更喜欢:

if key in ((2,i) for i in range(1,51)) and (1,1) in previous:

答案 1 :(得分:5)

按元素比较:

if (key[0] == 2) and (1 <= key[1] <= 50) and ((1, 1) in previous):

或者,没有两者之间的比较:

if (key[0] == 2 and key[1] >= 1 and key[1] <= 50) and ((1,1) in previous):

答案 2 :(得分:4)

创建__eq__执行检查的自定义对象:

class AnyOf(object):
    def __init__(self, valid):
        self.valid = set(valid)

    def __eq__(self, other):
        return other in self.valid

between_1_and_50 = AnyOf(xrange(1, 51))

if key == (2, between_1_and_50):
    # do something...

如果需要,您还可以使用functools.total_ordering进行扩展,以支持更大范围的比较。