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

How to get the latest date from a list of tuples?

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

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

我想要 return 最新日期的那个,我该如何实现?

我试过了:

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

但是这个returns (2, '2006-09-14'),我很疑惑,这是为什么呢?谢谢

试试这个:

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

您可以使用带key参数的max()函数,根据函数获取最大元素。

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

将其设置为第二个元素

比较元组时,默认行为是比较它们的第一个元素,如果有平局则比较第二个元素,依此类推。所以当你调用 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) 时,它 returns 元组中的最大第一个元素为 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)

它returns

'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]))].

这可能看起来有点混乱,因为它都在一行上。

基本上它的作用是这样的:

您想制作一个仅包含日期元素的列表 bb = [i[1] for i in a].

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

最后需要得到a[1],a的位置1的元素

所以加起来是 a[[i[1] for i in a].index(max([i[1] for i in a]))]