查找与字符串列表最接近和最远的值

2024-10-03 17:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个时间列表和一个当前时间。我正试图找到离当前时间最近和最远的时间。我发现用字符串解决这样的任务很困难

但是,我可以使用min和max函数打印字符串列表中的最小和最大时间

I saw @kennytm posting a similar solution to the problem using: min(myList, key=lambda x:abs(x-myNumber)), but I'm not entirely sure if that works on strings.

谁能为我的问题提供一个解决方案

current_time = '09:00'
time = ['09:30','11:50','11:55','11:55','12:00','12:10','12:15','12:25','12:35','12:50','12:55', '13:00']

print(min(time))
# 09:30
print(max(time))
# 13:00

Tags: to函数字符串列表time时间minmax
3条回答

将当前时间和时间列表的hh:mm格式转换为单个整数。然后遍历整数,并使用原始时间列表跟踪时间

def hhmm2int(t):
    hour_min = t.split(':')
    hours_as_minutes = int(hour_min[0]) * 60
    minutes = int(hour_min[1])
    return hours_as_minutes + minutes


current_time = '09:00'
time = ['09:30', '11:50', '11:55', '11:55', '12:00', '12:10', '12:15', '12:25', '12:35', '12:50', '12:55', '13:00']

current_time = hhmm2int(current_time)
time_as_int = [hhmm2int(t) for t in time]

min_delta = float('inf')
max_delta = 0
closest_time = ''
furthest_time = ''
for i in range(len(time_as_int)):
    delta = abs(time_as_int[i] - current_time)
    if delta < min_delta:
        min_delta = delta
        closest_time = time[i]
    if delta > max_delta:
        max_delta = delta
        furthest_time = time[i]

print(closest_time, furthest_time)

将日期转换为datetime对象时,可以使用min(time,key=lambda x : abs(current_time-x))获得最接近的时间:

from datetime import datetime

current_time = '09:00'
time = ['09:30','11:50','11:55','11:55','12:00','12:10','12:15','12:25','12:35','12:50','12:55', '13:00']

def get_time(time):
  return datetime.strptime(time, '%H:%M')

current_time = get_time(current_time)
time = [get_time(i) for i in time]

print(min(time,key=lambda x : abs(current_time-x)).strftime('%H:%M'))

一个简单的解决方案:

diff_time = lambda t: abs(int(current_time.replace(':', '')) \
                        - int(t.replace(':', '')))

从00:00(int:0)到23:59(int:2359),时间已经按字典顺序排列,并且在转换为整数时保持顺序

>>> min(time, key=diff_time)
'09:30'

>>> max(time, key=diff_time)
'13:00'

相关问题 更多 >