我正在编写一个判断时间片是否重叠的脚本.

我有一个处理程序函数,如下所示:

def intersection_checker(foo, bar):
    if foo == bar:
       return True
    if foo[0] == bar[1] or foo[1] == bar[0]:
       return True
    if bar[0] < (foo[0] or foo[1]) < bar[1]:
       return True
    if foo[0] < (bar[0] or bar[1]) < foo[1]:
       return True
    return False

对象foo是两个datetime.time()对象的元组:

foo = (datetime.strptime('06:30:00','%H:%M:%S').time(), datetime.strptime('08:15:00','%H:%M:%S').time())

对象bar是类FOO的datetime.time()个对象中的set()个.该集合可以包括200+k个对象.

调用处理程序(intersection_checker)的行如下所示:

...
if len(bar) > 1 and True in set(map(intersection_checker, repeat(foo), bar)):
...

这个代码起作用了.问题是,处理如此大量的数据需要几个世纪的时间.我try 使用for循环迭代槽函数,但效果不如使用内置map.也许有一种方法可以更高效地传输和处理大量数据?或者以不同的方式判断交叉口?是的,只找到前True个值就足够了,不需要遍历整个条形图.

推荐答案

通过替换以下代码,您的性能可能会得到提升:

True in set(map(intersection_checker, repeat(foo), bar))

有了这一点:

any(map(intersection_checker, repeat(foo), bar))

通过首先转换为一个集合,您强制映射整个数据集,然后才能确定是否有任何值为True.使用any()将在找到True值后立即停止map迭代器.

Python相关问答推荐

如何分割我的收件箱,以便连续的数字各自位于自己的收件箱中?

隐藏QComboBox的指示器(qdarkstyle)

Pandas 按照特殊规则保留每n行

键盘.任务组

强制venv在bin而不是收件箱文件夹中创建虚拟环境

如何销毁框架并使其在tkinter中看起来像以前的样子?

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

Python中的函数中是否有充分的理由接受float而不接受int?

分组数据并删除重复数据

三个给定的坐标可以是矩形的点吗

如何将ctyles.POINTER(ctyles.c_float)转换为int?

Python上的Instagram API:缺少client_id参数"

将pandas Dataframe转换为3D numpy矩阵

使用groupby Pandas的一些操作

将9个3x3矩阵按特定顺序排列成9x9矩阵

Pre—Commit MyPy无法禁用非错误消息

cv2.matchTemplate函数匹配失败

将JSON对象转换为Dataframe

CommandeError:模块numba没有属性generated_jit''''

Tkinter菜单自发添加额外项目