python - 给定 python 中的天、月和小时列表,如何找到最小值?
问题描述
假设我有一个包含以下元素的列表:
times = ['1 day ago', '1 day ago', '1 day ago', '1 day ago', '1 day ago', '7 days ago', '5 months ago', '27 days ago', '7 days ago', '7 days ago', '1 month ago', '1 month ago', '7 days ago', '7 days ago', '7 days ago', '7 days ago', '27 days ago', '1 month ago', '6 hours ago', '22 hours ago', '20 hours ago', '15 hours ago', '1 day ago', '4 days ago', '10 days ago', '8 days ago', '6 days ago', '7 days ago', '8 hours ago', '14 days ago', '14 days ago', '22 days ago', '2 months ago', '2 months ago', '2 months ago']
我想知道如何找到与最短持续时间相对应的条目。我有一个想法,可以查看几天、几个月等,但这感觉效率很低。有没有人有任何想法?谢谢!
解决方案
您可以将其转换为datetime.timedelta
可用于min
:
from datetime import timedelta
def convert(s):
n, unit, __ = s.split()
n = int(n)
if unit.startswith('month'): # assuming "1 month" means 30 days
n *= 30
unit = 'days'
if not unit.endswith('s'):
unit += 's'
return timedelta(**{unit: n})
然后转换字符串并取最小值:
deltas = [convert(s) for s in times]
min(deltas)
或将此方法用作key
to min
:
min(times, key=convert)
推荐阅读
- c++ - C++ 奇怪的执行顺序
- python - Scrapy 传递请求
- sql - 如何在 Presto SQL 引擎中将字符串转换为日期?
- c++ - 忽略第 3 方标头的“Wunused-parameter”
- swift - RxSwift:BehaviorSubject 和 BehaviorRelay 的使用区别是什么?
- javascript - 在 vue 中显示嵌套数组
- javascript - onclick for Bootstrap .btn-group 复选框适用于 JSFiddle 但不适用于浏览器
- c - C语言中的指针实验
- javascript - ASP .Net Core 日期范围验证
- c# - 如何在http响应之前过滤api结果