很简单的问题,但是我不知道如何实现。
实质上:
>>> r = range(4,-1)
>>> 3 in r
False
>>> q = range(-1,4)
>>> 3 in q
True
Run Code Online (Sandbox Code Playgroud)
如您所见,我具有相同的边界-1和4,以及相同的测试值,所以当我不知道它们的顺序时,如何说'3'在'-1'和'4'之间送给我吗?
为什么不先对边界排序?
r = range(*sorted((4, -1)))
q = range(*sorted((-1, 4)))
Run Code Online (Sandbox Code Playgroud)
range 不会做你认为它会做的事情。
它创建一个列表;它不是一个数字范围。实际上它在 Python 3 中确实如此。
想象一个情况,当lowerEnd是 -20000 和upperEnd是 +20000 时。在这种情况下使用range( -20000, 20000 )和 比较会浪费内存和 CPU 能力。numrange()
比较一个num对lowerEnd和upperEnd限制就足够了
您要检查:
num = 3
print(-1 < num < 4)
Run Code Online (Sandbox Code Playgroud)
为什么不尝试打印代码片段的每个步骤?该代码在某种程度上变得不言自明。range()实际上返回一个列表。所以当执行这一行时
r = range(4,-1)
print r
[] ## returned an empty list so which is why 3 in r returns False.
Run Code Online (Sandbox Code Playgroud)
但是当你像这样执行时
q = range(-1,4)
print q
[-1, 0, 1, 2, 3] ## Returned a list with 3 in it so 3 in q returns True
Run Code Online (Sandbox Code Playgroud)
现在你想检查范围内的情况,那么你可以这样做
if -1<= 3 <= 4:
print "Falls in the range"
else:
print "not in range"
Run Code Online (Sandbox Code Playgroud)
输出:
Falls in the range
Run Code Online (Sandbox Code Playgroud)