在列表中查找第三个最新日期

时间:2017-08-19 09:02:00

标签: python list

我有一种情况需要获得第三个最新日期,即

INPUT:

['14-04-2001', '29-12-2061', '21-10-2019',
 '07-01-1973', '19-07-2014','11-03-1992','21-10-2019']

此外,INPUT

6
14-04-2001
29-12-2061
21-10-2019
07-01-1973
19-07-2014
11-03-1992

输出:19-07-2014

import datetime
datelist = ['14-04-2001', '29-12-2061', '21-10-2019', '07-01-1973', '19-07-2014','11-03-1992','21-10-2019' ]
for d in datelist:
    x = datetime.datetime.strptime(d,'%d-%m-%Y')
    print x

我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:2)

您可以对列表进行排序并从中获取第3个元素。

my_list = [datetime.datetime.strptime(d,'%d-%m-%Y') for d in list]
# [datetime.datetime(2001, 4, 14, 0, 0), datetime.datetime(2061, 12, 29, 0, 0), datetime.datetime(2019, 10, 21, 0, 0), datetime.datetime(1973, 1, 7, 0, 0), datetime.datetime(2014, 7, 19, 0, 0), datetime.datetime(1992, 3, 11, 0, 0), datetime.datetime(2019, 10, 21, 0, 0)]
my_list.sort(reverse=True)
my_list[2]
# datetime.datetime(2019, 10, 21, 0, 0)

另外,根据Kerorin的建议,如果你不需要就地排序而只需要第三个元素,你可以简单地做到

sorted(my_list, reverse=True)[2]

<强>更新

要删除重复项,从this answer获取灵感,您可以执行以下操作 -

import datetime

datelist = ['14-04-2001', '29-12-2061', '21-10-2019', '07-01-1973', '19-07-2014', '11-03-1992', '21-10-2019']
seen = set()
my_list = [datetime.datetime.strptime(d,'%d-%m-%Y')
           for d in datelist
           if d not in seen and not seen.add(d)]
my_list.sort(reverse=True)

答案 1 :(得分:0)

您可以使用heapq.nlargest执行此操作。

from AuthorClass import Author

class Book:

此返回import heapq from datetime import datetime datelist = [ '14-04-2001', '29-12-2061', '21-10-2019', '07-01-1973', '19-07-2014', '11-03-1992', '21-10-2019' ] heapq.nlargest(3, {datetime.strptime(d, "%d-%m-%Y") for d in datelist})[-1]