【发布时间】:2020-02-28 06:07:10
【问题描述】:
我有两个不同类型“事件”(listA 和 listB)的列表,每个事件都有一个发生的时间段(存储为开始时间和持续时间,以秒为单位),我想找到所有listA 中的事件与 listB 中发生的任何事件同时发生。
事件不需要发生在完全相同的时间和相同的持续时间,如果有任何时间重叠将被计算在内。此外,列表列表中没有重叠,在任何给定的一秒内,最多一个来自 listA 的事件和一个来自 listB 的事件正在运行。最后,listB 中的所有事件必须发生在来自 listA 的事件中(它可以与 listA 中的事件同时开始和结束,但不能在它之前开始或在它之后结束)。换句话说,所有 listB 事件都完全包含在 listA 事件中,而 listA 事件将包含0 到n listB 事件。
现在,我在想我可以为 listB 中的每个项目与 listA 中的每个项目做一个集合交集,但这似乎真的很低效,有没有一种 有效 的方法来找到所有这些重叠?
示例列表:
listA=[
{
"duration": 3600,
"starttime": "1/31/2019 5:00",
"listAData": "..."
},
{
"duration": 1800,
"starttime": "1/31/2019 7:00"
"listAData": "..."
},
{...},
]
listB=[
{
"duration": 1800,
"starttime": "1/31/2019 5:15",
"listBData": "..."
},
{
"duration": 60,
"starttime": "2/1/2019 23:00"
"listBData": "..."
}
]
所以在这个example 我会得到 A1 和 A3(因为它们分别与 B1 和 B2 重叠),而 A2 会被忽略。
我也不关心 A1 是否与多个 B 对象重叠,所以我真的只需要与至少一个 listB 事件同时发生的所有 listA 事件的列表,或者它们的索引列表或其他.
【问题讨论】:
-
据我了解,您的文字描述与图形相矛盾。所以 B 总是总是被 A 完全包围,而 A 包含
0到nB?对吗? -
这是正确的,是的,不确定我在文本中的哪个地方与此相矛盾?
标签: python