如何从元组列表中获取最新日期



我有一个列表,如下所示:

[(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14'),....]

我想退回日期最晚的,我该如何实现?

我试过了:

a= [(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]
print(max(a))

但是这个返回(2, '2006-09-14'),我很困惑,为什么是这样?谢谢

默认的max函数作用于元组的第一个元素。您可以通过max(a, key=lambda x: x[1])将其设置为第二个元素

试试这个:

print(max(a, key=lambda x: datetime.datetime.strptime(x[1], '%Y-%m-%d')))

您可以使用带有key参数的max((函数来根据函数获取max元素。

在比较元组时,默认行为是比较它们的第一个元素,如果有平局,则比较第二个元素,依此类推。因此,当您调用max([(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')])时,您会得到(2, '2006-09-14'),因为它有最大的第一个元素。

您需要将一个自定义函数传递给内置max函数的key参数,以便在日期上进行比较:

>>> from datetime import datetime
>>> arr = [(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]
>>> max(arr, key=lambda item: datetime.strptime(item[1], "%Y-%m-%d"))
(1, '2020-11-17')

使用max(a)时,它会返回元组中最大的第一个元素,即2。因此,max(a) = (2, '2006-09-14')我建议你这个代码:

import numpy as np
list_dates=[]
for i in np.arange(len(a)):
list_dates.append(a[i][1])
max(list_dates)

它返回

'2020-11-17'

在您使用max函数的代码中,它比较每个元组的第一个元素并给出结果。

我希望下面的代码示例能满足您的用例-

a= [(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]
n=len(a)
max_date=a[0][1]
for i in range(1,n):
date=a[i][1]
if(max_date < date):
max_date=date
print(max_date)

执行max(a)是查看第零个元素并找到最大值,即2。您只想查看中包含日期的元素,因此需要a[[i[1] for i in a].index(max([i[1] for i in a]))]

这看起来可能有点令人困惑,因为这一切都在一条线上。

本质上它的作用是:

您希望使列表b仅包含日期元素。b = [i[1] for i in a]

然后找到该列表的最大值的索引。max_index = b.index(max([i[1] for i in a])),它返回"1",所以我们知道它是位置1的元素。

最后,您需要获得a[1],即位于位置1的元素。

所以加在一起就是a[[i[1] for i in a].index(max([i[1] for i in a]))]。🦄

最新更新