[英]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.