Python dateutil.rrule跳过每第n次出现

时间:2017-07-16 00:12:55

标签: python-3.x python-dateutil

很容易得到dateutil.rrule.rrule实例的第n次出现:

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

...但我有一个事件occurrence in rule is True;我想知道它出现了什么(即上面的例子中出现的索引,在上面的例子中是15)而没有引起性能问题,因为我可能需要在很多事件中这样做。

这是否可能,如果可行,该如何做?

1 个答案:

答案 0 :(得分:0)

我不知道一种方法可以让你使用当前的一组函数对值进行测试。

但是,根据您执行计算的频率,您可以考虑执行以下操作:

  1. 使用cache feature
  2.   

    cache - 如果给定,它必须是一个布尔值,指定启用或   禁用缓存结果。如果您将使用相同的rrule实例   多次,启用缓存将提高性能   相当。

    1. 将结果重新映射到numpy数组以获得最佳索引分辨率:
    2. 鉴于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()是否比使用简单循环迭代结果集更快,但这是一种更易读的方法。