我有几个不同的日期和时间,在列表中用作少数DateTime对象

from datetime import datetime

arr = [datetime(2023, 9, 1, hour=4, minute=3),
       datetime(2023, 9, 1, hour=2, minute=15),
       datetime(2023, 9, 1, hour=6, minute=45),
       # trimmed for brevity
]

如果我想看看两个dateTime对象是否彼此24-hours属于不难做到。除了,我试图查看是否给定的DateTime对象列表,其中至少可以包含在24-hour时间跨度内。

对于此的real-world用例,这些时间戳可能代表用户帐户上的sign-ins,如果用户试图在15分钟内登录过于n次,我可能会选择根据该*采取一些措施。

如何在Python中完成?


*不用担心,我实际上并不是要进行DIY身份验证 - 这纯粹是一个例子。

分析解答

如果我正确理解您,则可以对数组进行排序,然后使用某些尺寸的移动窗口。然后检查此窗口的第一个和最后一个元素是否落到所需范围:

from datetime import datetime


def check_arr(arr, seconds=60 * 60 * 24, window=3):
    if len(arr) < window:
        return False

    for i in range(len(arr) - window + 1):
        first, *_, last = arr[i : i + window]
        s = (last - first).total_seconds()
        if s <= seconds:
            return True

    return False


arr = [
    datetime(2023, 9, 1, hour=4, minute=3),
    datetime(2023, 9, 1, hour=2, minute=15),
    datetime(2023, 9, 1, hour=6, minute=45),
    # trimmed for brevity
]

print(check_arr(sorted(arr)))

printing:

True