Boolean logic Boolen检查datetime.now()是否在元组列表中任何元组的值之间

Boolean logic Boolen检查datetime.now()是否在元组列表中任何元组的值之间,boolean-logic,python-3.7,Boolean Logic,Python 3.7,我有一个元组列表,如下所示: import datetime as dt hours = [(dt.datetime(2019,3,9,23,0), dt.datetime(2019,3,10,22,0)), (dt.datetime(2019,3,10,23,0), d.datetime(2019,3,11,22,0))] 列表长度可变,如果datetime.now()位于列表中任何元组的第一个和第二个元素之间,我只需要一个布尔值。 在NumPy中,我会: ((start &

我有一个元组列表,如下所示:

import datetime as dt
hours = [(dt.datetime(2019,3,9,23,0), dt.datetime(2019,3,10,22,0)),
        (dt.datetime(2019,3,10,23,0), d.datetime(2019,3,11,22,0))]
列表长度可变,如果
datetime.now()
位于列表中任何元组的第一个和第二个元素之间,我只需要一个布尔值。 在
NumPy
中,我会:

((start <= now) & (end >= now)).any()

有更好的建议吗?

any(map(lambda d:d[0])一个更详细的替代方案。(但在我看来更具可读性)

any(map(lambda d: d[0] <= now <= d[1], hours))

非常好用。非常感谢。祝你周末愉快!事实上有些问题。只有当列表中正好有两个元组时才有效。如果只有一个元组:TypeError:()缺少1个必需的位置参数:“end”@steff,是的,修复了它,但我想是以减少pythonic为代价的。谢谢vm。现在实际使用它:
any(d[0]@steff更好。
any(map(lambda d: d[0] <= now <= d[1], hours))
    any(d[0] <= now <= d[1] for d in hours)
import datetime as dt


def in_time_ranges(ranges):
    now = dt.datetime.now()
    return any([r for r in ranges if now <= r[0] and r[1] >= now])


ranges1 = [(dt.datetime(2019, 3, 9, 23, 0), dt.datetime(2019, 3, 10, 22, 0)),
           (dt.datetime(2019, 3, 10, 23, 0), dt.datetime(2019, 3, 11, 22, 0)),
           (dt.datetime(2019, 4, 10, 23, 0), dt.datetime(2019, 5, 11, 22, 0))]

print(in_time_ranges(ranges1))

ranges2 = [(dt.datetime(2017, 3, 9, 14, 0), dt.datetime(2018, 3, 10, 22, 0)),
           (dt.datetime(2018, 3, 10, 23, 0), dt.datetime(2018, 3, 11, 22, 0)),
           (dt.datetime(2018, 4, 10, 23, 0), dt.datetime(2018, 5, 11, 22, 0))]

print(in_time_ranges(ranges2))
True
False