2017-07-16 86 views
0

可以很容易地得到一個dateutil.rrule.rrule實例的第n次出現:Python的dateutil.rrule跳過每一個第n次出現

rule = dateutil.rrule.rrule(...) 
occurrence = rule[15] 

...但是,我有這種情況的發生是occurrence in rule is True;我想知道它是什麼發生(即發生的索引,在上面的例子中是15),而不會導致性能問題,因爲我可能需要做很多事情。

這是可能的,如果是這樣,它將如何完成?

回答

0

我不知道有一種方法可以讓您使用當前函數集對值執行測試。

但是,這取決於你如何頻繁地執行你的計算,你可能會考慮做以下內容:

  1. 使用cache feature

緩存 - 如果給定的,它必須是一個布爾值值指定啓用或 禁用緩存結果。如果您多次使用相同的rrule實例 ,啓用緩存將顯着提高性能 。

  • 重新映射的結果到用於最佳指數分辨率的numpy的數組:
  • 鑑於r是一大組的結果:

    >>> r # Your result set 
    <dateutil.rrule.rrule object at 0x7f616d4182e8> 
    >>> r[1] # Example of what's inside 
    datetime.datetime(2015, 1, 1, 0, 0) 
    >>> import numpy as np # Let's load numpy 
    >>> a = np.array(list(r)) # We build a numpy array, should be fast 
    >>> np.argwhere(a == datetime.datetime(2015, 1, 1, 0, 0)) # Catch'em all! 
    array([[1]]) 
    

    我我不確定np.argwhere()是否會比使用簡單循環迭代結果集更快,但這是一種更易讀的方法。