在 Python 中,我们有时会遇到需要按日期时间对列表进行排序的情况。例如,有一个列表 data,其中包含多个元组,每个元组由四个元素组成:
data = (a, b, DateTime, d)
其中,DateTime 是日期时间元素。我们希望按 DateTime 元素对列表 data 进行排序,以使最晚的日期/时间元素排在最前面。
2、解决方案
要解决这个问题,我们可以使用 sorted() 函数。sorted() 函数可以对列表进行排序,并返回一个新的已排序列表。我们可以通过指定 key 参数来指定排序的依据。对于本例,我们可以使用 lambda 函数作为 key 参数。lambda 函数可以定义一个匿名函数,该函数接收一个列表中的元素作为参数,并返回一个值。我们可以使用这个值来进行排序。
l_desc = sorted(l, key=lambda t: t[2], reverse=True)
在这个例子中,lambda 函数接收一个元组 t 作为参数,并返回元组中的第三个元素 t[2]。这意味着排序将基于元组中的日期时间元素。reverse=True 参数指定按降序排序,这意味着最晚的日期/时间元素将排在最前面。
最后,我们可以将排序后的列表赋值给一个新的变量,如 l_desc。
代码例子:
from pprint import pprint
import datetime
l = [('a', 'b', datetime.datetime.now(), 'd') for _ in xrange(10)]
pprint(l)
l_desc = sorted(l, key=lambda t: t[2], reverse=True)
pprint(l_desc)
l_asc = sorted(l_desc, key=lambda t: t[2])
pprint(l_asc)
输出结果:
[('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 349796), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350127), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350132), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350134), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350137), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350140), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350143), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350145), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350148), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350151), 'd')]
[('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350151), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350148), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350145), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350143), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350140), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350137), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350134), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350132), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350127), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 349796), 'd')]
[('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 349796), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350127), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350132), 'd'),
('a', 'b', datetime.datetime(2013, 12, 11, 17, 35, 0, 350134), 'd'),
('