Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中查找第三个最近的日期_Python_List - Fatal编程技术网

Python 在列表中查找第三个最近的日期

Python 在列表中查找第三个最近的日期,python,list,Python,List,我有一个情况,我需要得到第三个最晚的日期,即 输入: ['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-

我有一个情况,我需要得到第三个最晚的日期,即

输入:

['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的建议,如果您不需要在适当的位置进行排序,只需要始终使用第三个元素,那么您可以简单地进行排序

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)

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

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]
更新

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

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)
你可以用它来做这件事

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)
您可以使用它来执行此操作

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)

请不要调用您的列表
list
,这样您会发现很多麻烦。至于问题:1)用datetime对象构建一个新列表,2)对该列表进行排序3)从该列表中获取最后的第三个元素。@dhke edited,我尝试使用sorted,但不确定如何实现
sorted(list,key=lambda d:datetime.datetime.strTime(d,'%d-%m-%Y'),reverse=True)
。请注意,sorted返回一个生成器,因此您不能仅在其上使用
[2]
。我还需要消除重复日期'21-10-2019'@dhke no-
sorted
返回一个
列表
-因此索引到该列表中很好…请不要调用您的列表
列表
,这样您会发现很多麻烦。至于问题:1)用datetime对象构建一个新列表,2)对该列表进行排序3)从该列表中获取最后的第三个元素。@dhke edited,我尝试使用sorted,但不确定如何实现
sorted(list,key=lambda d:datetime.datetime.strTime(d,'%d-%m-%Y'),reverse=True)
。请注意,sorted返回一个生成器,因此您不能仅在其上执行
[2]
。我还需要消除重复日期'21-10-2019'@dhke no-
sorted
返回一个
列表
-因此索引到该列表中很好…另外:
sorted(my_list,reverse=True)[2]
也被接受。谢谢,添加到答案中。@ashishnitinpail是否可以消除重复的21-10-2019'@ashishnitinpail是否可以使其更像控制台上的输入,也可以消除重复的代码duplicate@Kittystone更新了重复数据消除的答案,已将其编辑为非控制台代码样式。其他:
sorted(my_list,reverse=True)[2]
也被接受。谢谢,添加到答案中。@ashishnitinpail这样做可以消除重复的21-10-2019'@ashishnitinpail您可以使其更像控制台上的输入,也可以消除重复的代码吗duplicate@Kittystone更新了重复数据消除的答案,已经针对非控制台代码样式对其进行了编辑。