Python: encuentre la fecha más cercana de una lista

Dada una fecha y una lista de fechas, la tarea es escribir un programa en Python para encontrar la fecha más cercana en la lista de fechas de entrada dada a la fecha de entrada.

Ejemplos:

Entrada: test_date_list = [datetime(2020, 4, 8), datetime(2016, 8, 18), datetime(2018, 9, 24), datetime(2019, 6, 10), datetime(2021, 8, 10)] , fecha_prueba = fechahora(2017, 6, 6)

Salida: 2016-08-18 00:00:00

Explicación: la fecha más cercana al 6 de junio de 2017 es el 18 de agosto de 2016 en la lista.

Entrada: test_date_list = [datetime(2020, 4, 8), datetime(2016, 8, 18), datetime(2018, 9, 24), datetime(2019, 6, 10), datetime(2021, 8, 10)] , fecha_prueba = fechahora(2016, 6, 6)

Salida: 2016-08-18 00:00:00

Explicación: la fecha más cercana al 6 de junio de 2016 es el 18 de agosto de 2016 en la lista.

Método #1: Usar min() + comprensión de diccionario + abs()

En esto, una diferencia de cada fecha con una fecha determinada se calcula como clave y la fecha como un valor usando abs(). El min(), se usa para obtener la diferencia clave mínima y su valor es el resultado.

Python3

# Python3 code to demonstrate working of
# Nearest date in List
# Using min() + dictionary comprehension + abs()
from datetime import datetime
  
# initializing datelist
test_date_list = [datetime(2020, 4, 8), datetime(2016, 8, 18), 
                  datetime(2018, 9, 24), datetime(2019, 6, 10),
                  datetime(2021, 8, 10)]
               
# printing original list
print("The original list is : " + str(test_date_list))
  
# initializing test date 
test_date = datetime(2017, 6, 6)
  
# get all differences with date as values 
cloz_dict = { 
  abs(test_date.timestamp() - date.timestamp()) : date 
  for date in test_date_list}
  
# extracting minimum key using min()
res = cloz_dict[min(cloz_dict.keys())]
  
# printing result
print("Nearest date from list : " + str(res))

Producción:

La lista original es: [datetime.datetime(2020, 4, 8, 0, 0), datetime.datetime(2016, 8, 18, 0, 0), datetime.datetime(2018, 9, 24, 0, 0) , fechahora.fechahora(2019, 6, 10, 0, 0), fechahora.fechahora(2021, 8, 10, 0, 0)]

Fecha más cercana de la lista: 2016-08-18 00:00:00

Método #2: Usar min() + abs() + lambda

Otra forma más sencilla de resolver este problema es obtener diferencias y capturar la mínima usando min(). Este es un método flexible y se puede extender a todos los tipos de datos, no solo a la fecha y hora. 

Python3

# Python3 code to demonstrate working of
# Nearest date in List
# Using min() + abs() + lambda
from datetime import datetime
  
# initializing datelist
test_date_list = [datetime(2020, 4, 8), datetime(2016, 8, 18), 
                  datetime(2018, 9, 24), datetime(2019, 6, 10),
                  datetime(2021, 8, 10)]
               
# printing original list
print("The original list is : " + str(test_date_list))
  
# initializing test date 
test_date = datetime(2017, 6, 6)
  
# shorthand using lambda function for compact solution
res = min(test_date_list, key=lambda sub: abs(sub - test_date))
  
# printing result
print("Nearest date from list : " + str(res))

Producción:

La lista original es: [datetime.datetime(2020, 4, 8, 0, 0), datetime.datetime(2016, 8, 18, 0, 0), 

fechahora.fechahora(2018, 9, 24, 0, 0), fechahora.fechahora(2019, 6, 10, 0, 0), fechahora.fechahora(2021, 8, 10, 0, 0)]

Fecha más cercana de la lista: 2016-08-18 00:00:00

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *