我有一个列表,如下所示:
[(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]))]
。🦄