【问题标题】:Python dateutil.rrule skip every nth occurrencePython dateutil.rrule 跳过每第 n 次出现
【发布时间】:2017-07-16 00:12:54
【问题描述】:

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

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

...但是我遇到了occurrence in rule is True;我想知道它是哪个事件(即事件的索引,在上面的示例中为 15),而不会导致性能问题,因为我可能需要对很多事件执行此操作。

这可能吗?如果可以,如何做到?

【问题讨论】:

    标签: python-3.x python-dateutil


    【解决方案1】:

    我不知道有一种方法可以让您使用当前函数集对值运行测试。

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

    1. 使用cache feature:

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

    1. 将结果重新映射到 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() 是否会比使用简单循环遍历结果集更快,但这是一种更易读的方法。

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2018-03-24
      • 2018-09-08
      • 2018-08-11
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多