如何在python 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']
Run Code Online (Sandbox Code Playgroud)
Tim*_*ker 43
>>> 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']
Run Code Online (Sandbox Code Playgroud)
jd.*_*jd. 28
sorted(timestamps, key=lambda d: map(int, d.split('-')))
Run Code Online (Sandbox Code Playgroud)
只是这样做:
timestamps.sort()
Run Code Online (Sandbox Code Playgroud)
结果:
['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']
Run Code Online (Sandbox Code Playgroud)
订单年-月-日允许这种排序,因为在经过时间时,日期在一个月之前更改,而月份在一年之前更改。
这就像一个数字:当递增1时,单位数字(最右边的数字)在十位数之前改变,而后者在百位数之前改变。
并且有一个事实是sort()从左到右处理:如果要精确排序的两个字符串中某个位置的字符相同,则它将检查以下位置的两个字符串中的两个字符,以确定哪个字符是从逻辑上讲。
加上'0'<'1'为True,'1'<'2'为True等事实
>>> 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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54519 次 |
| 最近记录: |