繁体   English   中英

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

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

我有一个看起来像这样的列表:

[(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') ,我很困惑,这是为什么? 谢谢。

尝试这个:

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

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

默认的 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)它返回元组中最大的第一个元素,即 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 元素。

所以总的来说它是a[[i[1] for i in a].index(max([i[1] for i in a]))] 🦄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM