首页 > 解决方案 > 给定 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']

我想知道如何找到与最短持续时间相对应的条目。我有一个想法,可以查看几天、几个月等,但这感觉效率很低。有没有人有任何想法?谢谢!

标签: pythonpython-3.x

解决方案


您可以将其转换为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)

或将此方法用作keyto min

min(times, key=convert)

推荐阅读