是否有range()的实现,不仅限于整数?

时间:2016-11-02 13:50:37

标签: python-2.7 python-3.x range generic-programming

Python range()内置函数仅限于整数。

我需要类似签名range(start, stop, step)的更通用的功能,其中startstopstep可能属于任何类型

  • 定义stepstart的(可能多次)结果,
  • start和上述结果都可以与stop进行比较。

可以使用该函数(例如)获取一年中的一系列日期:

range(datetime.datetime(2015, 1, 1),
      datetime.datetime(2016, 1, 1),
      datetime.timedelta(1))

我知道我可以自己轻松编写这样的功能。但是,我正在寻找一些流行的软件包(如numpy或scipy)中的高效现有解决方案,同时使用Python 2和Python 3。

我已尝试将itertools.takewhileitertools.count合并,但后者似乎仅限于数字。

1 个答案:

答案 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])