1

如何更改以下内容:

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

转成 1 到 50 之间的*任意数字(包括 1 到 50)

我已经尝试了以下但它没有工作......

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

还有其他想法吗?

4

3 回答 3

5

如果 a) iterableprevious包含等于 的元组(1,1),并且 b) 元组key等于(2,1), (2,2), ...中的任何一个,则以下情况为真(2,50)

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

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

if len(key)==2 and key[0]==2 and 1 <= key[1] <= 50 and (1,1) in previous:
于 2013-10-17T15:51:33.053 回答
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):
于 2013-10-17T16:01:16.157 回答
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以支持更大范围的比较。

于 2013-10-17T16:01:38.310 回答