簡體   English   中英

查找與字符串列表最接近和最遠的值

[英]Finding the closest and furthest value to a list of strings

我有一個時間列表和當前時間。 我試圖找到距離當前時間最近和最遠的時間。 我發現很難在字符串中解決此類任務。

但是,我可以使用 min 和 max 函數在字符串列表中打印最小和最大時間。

我看到@kennytm 使用以下方法發布了類似的問題解決方案: min(myList, key=lambda x:abs(x-myNumber)) ,但我不完全確定這是否適用於字符串。

任何人都可以為我的問題提供解決方案嗎?

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

當您轉換日期為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'))

將 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)

一個簡單的解決方案:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM