使用Python中的列表理解查找最小/最大日期

jse*_*g32 2 python list-comprehension date

所以我有这个清单:

snapshots = ['2014-04-05',
        '2014-04-06',
        '2014-04-07',
        '2014-04-08',
        '2014-04-09']
Run Code Online (Sandbox Code Playgroud)

我想找到一个使用列表理解的最早日期.

这是我现在拥有的,

earliest_date = snapshots[0]
earliest_date = [earliest_date for snapshot in snapshots if earliest_date > snapshot]
Run Code Online (Sandbox Code Playgroud)

当我打印最早的日期时,我期望返回一个空数组,因为列表的第一个元素之后的所有值都已经大于第一个元素,但我想要一个值.

这是原始代码,表示我知道如何找到最小日期值:

for snapshot in snapshots:
    if earliest_date > snapshot:
        earliest_date = snapshot
Run Code Online (Sandbox Code Playgroud)

有人有什么想法吗?

Mar*_*ers 14

只需使用min()max()查找最早或最晚的日期:

earliest_date = min(snapshots)
lastest_date = max(snapshots)
Run Code Online (Sandbox Code Playgroud)

当然,如果您的日期列表已经排序,请使用:

earliest_date = snapshots[0]
lastest_date = snapshots[-1]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> snapshots = ['2014-04-05',
...         '2014-04-06',
...         '2014-04-07',
...         '2014-04-08',
...         '2014-04-09']
>>> min(snapshots)
'2014-04-05'
Run Code Online (Sandbox Code Playgroud)

一般来说,列表推导应仅用于构建列表,而不是用作通用循环工具.这就是for循环的用途,真的.

  • 对于 OP(我知道 Martijn 知道这一切) - 这是有效的,因为数字长度相等的字符串的默认排序顺序是从最低到最高。如果值的词法顺序不是所需的顺序,例如对于以“2014 年 4 月 6 日”等格式表示的日期,您可以提供一个“key”函数来告诉 Python 如何从输入。YYYY-MM-DD 中日期的自然排序是字符串排序为您提供的,这一事实是它是一个不错选择的原因。 (2认同)