如何从元组列表中获取最新日期?
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]))]
.
这可能看起来有点混乱,因为它都在一行上。
基本上它的作用是这样的:
您想制作一个仅包含日期元素的列表 b
。 b = [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]))]
。
我有一个如下所示的列表:
[(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]))]
.
这可能看起来有点混乱,因为它都在一行上。
基本上它的作用是这样的:
您想制作一个仅包含日期元素的列表 b
。 b = [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]))]
。