2016-11-02 1 views
0

파이썬 range() 내장 함수는 정수로 제한됩니다.정수에 국한되지 않는 range() 구현이 있습니까?

  • start-step의 (가능한 다수의) 첨가의 결과가 정의된다

    start, stopstep가 주어진 어떤 종류 될 수도 유사한 서명 range(start, stop, step),보다 일반적인 함수가 필요 ,

  • 모두 start이고, 상기 결과는 stop과 비교 될 수있다. 내가 쉽게 자신에 의해 같은 기능을 쓸 수 있습니다 알고

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

    :

기능 올해의 일의 순서를 얻기 위해 (예를 들어)을 사용할 수있다. 그러나, 나는 파이썬이 파이썬 3

모두 작업 (NumPy와 또는 scipy 같은) 일부 인기있는 패키지로 효율적으로 기존 솔루션을 찾고 난 이미 그러나 후자는 제한 될 것으로 보인다 itertools.countitertools.takewhile을 결합하는 시도 숫자로.

답변

1

간단한 생성기로이 작업을 수행 할 수 있습니다. 다음 예제는 float, integer 및 datetime에서 작동합니다. 당신은 단지 명확하게 정확한 날짜 (1 년 1 월 2016)을 지정해야합니다 날짜와

는 단지 2,016 명확하게 시간 델타 (timedelta (일 = 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) 

로를 지정 off-the-shelf 솔루션에 대해서는 numpy에서 arange이 있지만 datetime으로 테스트하지는 않았습니다.

>>> from numpy import arange 
>>> arange(0.5, 5, 1.5) 
array([0.5, 2.0, 3.5]) 
+0

감사합니다. 생성기 트릭을 알고 있지만 DIY 솔루션입니다. 'arange'는'datetime'과'timedelta'에서 작동하며, 거의 제가 찾고있는 것입니다, 그러나'-'와'/'연산을 정의 할 필요가 있고'/'는 숫자를 반환해야합니다. 'datetime' 객체를 수정했지만,'timedelta'에 대한 호출은 정확합니다 : https://docs.python.org/2/library/datetime.html#timedelta-objects. – abukaj

+0

DIY 솔루션의 문제점은 무엇입니까? @abukaj –

+1

동의. 왜 당신은 작동하는 무언가가있을 때 미리 풀어 놓은 라이브러리에있는 솔루션을 찾으러 갈 것입니다 .. 모든 코딩은 DIY 솔루션입니다. – scotty3785

관련 문제