2011-03-02 147 views
9

如何日期的下方數組排序蟒蛇2.4排序日期

timestamps = ['2011-06-2', '2011-08-05', '2011-02-04', '2010-1-14', '2010-12-13', '2010-1-12', '2010-2-11', '2010-2-07', '2010-12-02', '2011-11-30', '2010-11-26', '2010-11-23', '2010-11-22', '2010-11-16'] 
+5

爲什麼要使用Python 2.4? – 2011-03-02 11:34:04

回答

17
sorted(timestamps, key=lambda d: map(int, d.split('-'))) 
+1

很酷。不過,在Python 3中引發了一個TypeError。 – 2011-03-02 11:45:43

+0

我沒有安裝Python 3中,但會是這樣,因爲地圖返回一個迭代?在這種情況下,鍵功能應該是拉姆達d:元組(地圖(INT,d.split( ' - ')))。 – 2011-03-02 11:54:40

30
>>> import datetime 
>>> dates = [datetime.datetime.strptime(ts, "%Y-%m-%d") for ts in timestamps] 
>>> dates.sort() 
>>> sorteddates = [datetime.datetime.strftime(ts, "%Y-%m-%d") for ts in dates] 
>>> sorteddates 
['2010-01-12', '2010-01-14', '2010-02-07', '2010-02-11', '2010-11-16', '2010-11- 
22', '2010-11-23', '2010-11-26', '2010-12-02', '2010-12-13', '2011-02-04', '2011 
-06-02', '2011-08-05', '2011-11-30'] 
+1

這是我認爲最pythonic的方式。它不同於公認的答案,它可以縮放到不同的時間格式。 – CornSmith 2013-09-18 18:21:38

+1

最佳答案(+1),但你可能不應該叫最後一個對象'sorted',因爲它也是一個[功能]的名稱(https://docs.python.org/2/library/functions.html#sorted ) – Antoine 2017-01-10 10:01:09

0

如果它們歸類到相同的格式,你可以叫timestamps.sort()

4

剛這樣做:

timestamps.sort() 

re SULT:

['2010-1-12', 
'2010-1-14', 
'2010-11-16', 
'2010-11-22', 
'2010-11-23', 
'2010-11-26', 
'2010-12-02', 
'2010-12-13', 
'2010-2-07', 
'2010-2-11', 
'2011-02-04', 
'2011-06-2', 
'2011-08-05', 
'2011-11-30'] 

順序爲年,月,日允許這樣的排序,因爲在一個月前的一天的變化,當時間在流逝一年之前一個月的變化。

這就像一個數字:十位前的統一數字(最右邊的數字)的變化,與一百位的前後者的變化,當逐漸加入1。

還有就是排序()過程由左到右的事實:如果在一個精確的位置的字符是兩個字符串相同的排序,它將會在以下兩個字符串的兩個字符檢查決定哪一個在邏輯上位於前面。

另外一個事實,即'0' < '1''1' < '2'

+3

這樣,'2010-10-1'將'2010-2-1'之前排序。 – 2011-03-02 11:46:35

+0

@Tim Pietzcker哦,是的。它只適用於數字填充(2),更常見的情況是 – eyquem 2011-03-02 12:01:52

+0

,結果是錯誤的,因爲'2010-2-07'在'2010-12-13'之後,這是基數排序 – 2017-10-17 20:33:34

4
>>> import time 
>>> timestamps = ['2011-06-2', '2011-08-05', '2011-02-04', '2010-1-14', '2010-12-13', '2010-1-12', '2010-2-11', '2010-2-07', '2010-12-02', '2011-11-30', '2010-11-26', '2010-11-23', '2010-11-22', '2010-11-16'] 
>>> timestamps.sort(key=lambda x: time.mktime(time.strptime(x,"%Y-%m-%d"))) 
>>> timestamps 
['2010-1-12', '2010-1-14', '2010-2-07', '2010-2-11', '2010-11-16', '2010-11-22', '2010-11-23', '2010-11-26', '2010-12-02', '2010-12-13', '2011-02-04', '2011-06-2', '2011-08-05', '2011-11-30'] 
1
map(lambda x:x[1], sorted(map(lambda a:[map(int,a.split('-')),a], timestamps))) 

['2010-1-12', 
'2010-1-14', 
'2010-2-07', 
'2010-2-11', 
'2010-11-16', 
'2010-11-22', 
'2010-11-23', 
'2010-11-26', 
'2010-12-02', 
'2010-12-13', 
'2011-02-04', 
'2011-06-2', 
'2011-08-05', 
'2011-11-30']