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



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

输入:

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

另外,输入

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

我怎样才能做到这一点?

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

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 的建议,如果您不需要就地排序而只需要始终使用第 3 个元素,您可以简单地执行

sorted(my_list, reverse=True)[2]

更新

要删除重复项,从这个答案中汲取灵感,您可以执行以下操作 -

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)

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

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]

此返回datetime.datetime(2014, 7, 19, 0, 0)

最新更新