在python数组中排序日期

Raj*_*eev 13 python

如何在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)

  • 最好的答案(+1),但你可能不应该调用最后一个对象`sorted`,因为它也是[function]的名称(https://docs.python.org/2/library/functions.html#sorted) (3认同)
  • 这是我认为最蟒蛇的方式.与接受的答案不同,它可以扩展到不同的时间格式. (2认同)

jd.*_*jd. 28

sorted(timestamps, key=lambda d: map(int, d.split('-')))
Run Code Online (Sandbox Code Playgroud)

  • 凉.但是,在Python 3中引发了一个`TypeError`. (2认同)
  • 我没有安装Python 3,但这是因为map返回一个可迭代的吗?在这种情况下,键函数应为lambda d:tuple(map(int,d.split('-')))。 (2认同)

eyq*_*uem 6

只是这样做:

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等事实

  • 这样,“ 2010-10-1”将在“ 2010-2-1”之前排序。 (3认同)

Sen*_*ran 6

>>> 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)