在python中查找浮点数之间的范围

时间:2018-03-08 18:57:47

标签: python floating-point range

我试图找出一个数字是否在一个范围内,并且该范围的一个或两个数字可以是浮点数。

即。

if x in range(0.5, 3.5):
    pass

我理解范围只接受整数

那么,如何在python中找到一个或两个浮点数之间的范围。我四处搜索,发现了frange()和numpy.linspace()。然而前者似乎是用浮点数增加而且linspace只是在一个范围之间创建一个数字列表。所有的解决方案要么将地板除以10,要么与递增有关。

我已经看了range() for floats而不是我的问题。

感谢。

4 个答案:

答案 0 :(得分:2)

if 0.5 <= x < 3.5:
    pass

您可能希望根据您是希望结束包含还是排他性来更改不等号。

Python中的“范围”是“这两个数字之间所有数字”的抽象数学概念,但要么是实际的数字列表(Python 2中的range())或生成器,它能够生成一系列数字(Python 2中为xrange()或Python 3中为range())。由于两个给定数字之间存在无限多个实数,因此无法在计算机上生成这样的列表/序列。即使您将自己限制为浮点数,您的范围内也可能有数百万或数十亿的数字。

出于同样的原因,即使您的代码适用于整数(但仅限于Python 2),如果您的端点相距很远,它将会非常低效:它会首先生成该范围内所有整数的列表(消耗时间和内存),然后遍历列表以查看其中是否包含x

如果你曾试图用其他语言做类似的事情:大多数语言不允许像这样的双重比较,而是要求你做if 0.5 < x and x < 3.5之类的事情。

答案 1 :(得分:2)

if 0.5 < x < 3.5:
    pass

我认为你根本不需要任何功能。

答案 2 :(得分:1)

如果要保持相同的语法,可以使用math模块执行舍入。这假设x是一个整数。

from math import ceil, floor

if x in range(floor(0.5), ceil(3.5)):
    pass

答案 3 :(得分:0)

如上所述,数学模块将是实现此目的的一种方式,但是,它不是必需的,可以在一个(或两个)线路中完成

无论是

if 0.5 < x < 3.5:
    pass

或在一行中,例如

if 0.5 < x < 3.5: pass