Python range()
内置函数仅限于整数。
我需要类似签名range(start, stop, step)
的更通用的功能,其中start
,stop
和step
可能属于任何类型 :
step
到start
的(可能多次)结果,start
和上述结果都可以与stop
进行比较。可以使用该函数(例如)获取一年中的一系列日期:
range(datetime.datetime(2015, 1, 1),
datetime.datetime(2016, 1, 1),
datetime.timedelta(1))
我知道我可以自己轻松编写这样的功能。但是,我正在寻找一些流行的软件包(如numpy或scipy)中的高效现有解决方案,同时使用Python 2和Python 3。
我已尝试将itertools.takewhile
与itertools.count
合并,但后者似乎仅限于数字。
答案 0 :(得分:1)
您可以使用简单的生成器执行此操作。以下示例适用于浮点数,整数和日期时间。
使用日期时间,您只需要明确指定确切的日期(2016年1月1日),而不仅仅是2016年,并明确指定时间增量(timedelta(days = 1)而不是timedelta(1))
import datetime
def range2(start,stop,step):
value = start
while value <= stop:
yield value
value += step
for date in range2(datetime.datetime(2015,1,1),datetime.datetime(2016,1,1),datetime.timedelta(days=1)):
print(date)
至于现成的解决方案,有arange
numpy,但我没有用datetime测试过。
>>> from numpy import arange
>>> arange(0.5, 5, 1.5)
array([0.5, 2.0, 3.5])