如何更改以下内容:
if key == (2, *) and (1, 1) in previous:
要使*
变成1到50之间的任何数字(包括1到50)
我尝试过以下但是没有用......
if key == (2, range(1, 50)) and (1, 1) in previous:
还有其他想法吗?
答案 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
进行扩展,以支持更大范围的比较。