Python|对以字符串形式给出的日期列表进行排序
给定一个字符串格式的日期列表,编写一个Python程序以升序对日期列表进行排序。
例子:
Input : dates = [“24 Jul 2017”, “25 Jul 2017”, “11 Jun 1996”, “01 Jan 2019”, “12 Aug 2005”, “01 Jan 1997”]
Output : 01 Jan 2007
10 Jul 2016
2 Dec 2017
11 Jun 2018
23 Jun 2018
01 Jan 2019
方法:
在Python中,我们可以使用sort()
(用于就地排序)和sorted()
(返回一个新的排序列表)函数对列表进行排序。但是默认情况下,这些内置的排序函数会按字母顺序对字符串列表进行排序,这在我们的例子中会导致错误的顺序。因此,我们需要传递一个key
参数来告诉排序函数我们需要以特定方式比较列表项并相应地对它们进行排序。
在Python中,我们有datetime
模块,它使基于日期的比较更容易。 datetime.strptime()
函数用于将给定的字符串转换为日期时间对象。它接受两个参数:日期(字符串)和格式(用于指定格式。例如:%Y 用于指定年份)并返回一个日期时间对象。
句法:
datetime.strptime(date, format)
这个问题我们需要的格式如下:
%d ---> for Day
%b ---> for Month
%Y ---> for Year
因此,我们需要将datetime
对象作为key
参数传递给排序函数,以告诉排序函数它需要通过将字符串转换为日期来比较字符串并按升序对它们进行排序。
下面是上述方法的实现:
# Python3 program to sort the list of dates
# given in string format
# Import the datetime module
from datetime import datetime
# Function to print the data stored in the list
def printDates(dates):
for i in range(len(dates)):
print(dates[i])
if __name__ == "__main__":
dates = ["23 Jun 2018", "2 Dec 2017", "11 Jun 2018",
"01 Jan 2019", "10 Jul 2016", "01 Jan 2007"]
# Sort the list in ascending order of dates
dates.sort(key = lambda date: datetime.strptime(date, '%d %b %Y'))
# Print the dates in a sorted order
printDates(dates)
输出:
01 Jan 2007
10 Jul 2016
2 Dec 2017
11 Jun 2018
23 Jun 2018
01 Jan 2019