【发布时间】:2022-01-12 14:04:21
【问题描述】:
我有两个时间列表(Hour:Min:Sec 格式),我一直在努力将 list_a 中的每个条目与 list_b 中的所有条目进行比较,以确定 30 分钟内的值:
list_a = ["10:26:42", "8:55:43", "7:34:11"]
list_b = ["10:49:20", "8:51:10", "10:34:35", "8:39:47", "7:11:49", "7:42:10"]
预期输出:
10:26:42 is within 30m of 10:49:20, 10:34:35
8:55:43 is within 30m of 8:51:10, 8:39:47
7:34:11 is within 30m of 7:11:49, 7:42:10
到目前为止,我一直在做的是:
import datetime
# Convert the Lists to Datetime Format
for data in list_a:
convert = datetime.datetime.strptime(data,"%H:%M:%S")
list_a_times.append(convert)
for data in list_b:
convert = datetime.datetime.strptime(data,"%H:%M:%S")
list_b_times.append(convert)
# Using a Value of List A, Find the Closest Value in List B
for data in list_a_times:
closest_to_data = min(list_b_times, key=lambda d: abs(d - data))
print(data, closest_to_data)
这种方法有效,但它只能找到一个最接近的值!只要值在所需的 30 分钟或更短的时间内,我如何操纵 min() 函数来继续提供值?
【问题讨论】:
-
您的代码中甚至没有包含与“30 分钟”的比较。
-
请注意,您使用的是
datetime,它将时间转换为包含日期的日期时间对象(默认为 1900-1-1)。在 23:50 和 00:10 的边缘情况下,您会遇到问题。纯粹从时间上讲,这些都在 30 分钟之内,但如果包括日期,它们将相隔 23 小时和 40 小时。 -
@vaizki 我知道,我相信这是一个小误会!这就是为什么我结束了帖子,询问我如何操纵函数来做到这一点,这就是我想要弄清楚的。
-
@9769953 感谢您指出这一点!我应该使用不同的方法还是应该使用某种 if-else 树来解决这种边缘情况?
-
我不知道;这将取决于用例和输入。上述时间实际上可能相隔 23:40 小时,或 20 小时。没有上下文,这是不可能说的。您可以记录此类边缘情况(例如,午夜后 30 分钟内的所有时间),以供将来的读者(例如您自己)查看最终结果。
标签: python list datetime min python-datetime