2017-10-05 51 views
-1

二維數組排序我有以下的二維數組:Python的 - 按日期和時間

arr = [ 
["A", "B", "C", "10.03.2030", "14:06"], 
["W", "R", "Q", "09.04.2025", "12:06"], 
["Y", "X", "V", "11.05.2022", "12:06"], 
["Z", "N", "H", "10.03.2030", "14:06"], 
] 

我想&時間來排序的數組,是有一個快速的方法來做到這一點在Python?

在此先感謝

安迪

+3

我刪除了我的答案,因爲它實際上是錯誤的給予。但是,要回答你被低估的問題:我並沒有降低你的問題的積極性(我沒有贊成),但那些確實可能這樣做的人是因爲1)你沒有表現出努力去完成這件事,2)這不是一個新的問題,可以很容易地解決一些努力谷歌搜索。祝你好運。 – blacksite

回答

4

您可以通過首先將日期爲ISO8601格式使用已經標準化的時間字符串(而不是轉化到實際日期與datetime.strptime這是相當慢的),然後打破僵局排序:

lst = sorted(arr, key=lambda x: (x[3].split('.')[::-1], x[-1])) 
print(lst) 

x[3].split('.')[::-1]建立來自原始日期字符串的ISO日期列表,將年份設置爲第一個月份,下一個月份,然後是日期。


[['Y', 'X', 'V', '11.05.2022', '12:06'], 
['W', 'R', 'Q', '09.04.2025', '12:06'], 
['A', 'B', 'C', '10.03.2030', '14:06'], 
['Z', 'N', 'H', '10.03.2030', '14:06']] 
+0

非常感謝你,你的回答是最好的,對於日期和時間,所有其他解決方案只按日期排序,而不是按時間排序。我想問你一些問題,你能解釋一下這個部分:(x [3] .split('。')[:: - 1],x [-1],這將取日期並將其分割(點),第一個['2022','05','11'],我不明白爲什麼負數-1和不是2?還有x [-1]請... – Andy

0

在本answer提到的,你應該使用itemgetter用於此目的。如果您需要按日期(年)排序

from operator import itemgetter 
print(sorted(arr, key=itemgetter(4))) 
[['W', 'R', 'Q', '09.04.2025', '12:06'], 
['Y', 'X', 'V', '11.05.2022', '12:06'], 
['A', 'B', 'C', '10.03.2030', '14:06'], 
['Z', 'N', 'H', '10.03.2030', '14:06']] 

,你需要定義一個單獨的函數或使用LAMDA:

要通過時間的數據進行排序,使用此。我已經寫了兩種解決方案:

def sorting(item): 
    return item[3].split('.')[2] 

print(sorted(arr, key=sorting)) 

# using lambda 
print(sorted(arr, key= lambda item:item[3].split('.')[2])) 

[['Y', 'X', 'V', '11.05.2022', '12:06'], 
['W', 'R', 'Q', '09.04.2025', '12:06'], 
['A', 'B', 'C', '10.03.2030', '14:06'], 
['Z', 'N', 'H', '10.03.2030', '14:06']] 

這樣你不依賴於第三方包導入。

+3

但這並沒有正確排序日期。 2025年是第一個,2030年是第一個,2022年是最後一個。 – Mark

+0

@Mark我剛更新了我的代碼,按年份排序。 –

0

很短,整齊的碼比別人以上

lst = sorted(arr, key=lambda x: (x[3].split('.')[::-1], x[-1])) 
+1

除了不按時間排序,這與Moses Koledoye的回答沒有任何區別...... – Mark

+0

這不是按時間排序,而是按日期排序。 – Andy