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