对包含日期作为子字符串的列表排序

2024-09-27 23:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似这样的字符串列表 你可以看出在字符串的开头嵌入了一个日期 在绳子的末端。在

 a = ["08/19/2014100%ABC10/02/2014F","02/12/2012100%ABC10/02/2014F",
      "08/29/2014100%ABC10/02/2012F"]

我想根据日期子串对这个列表进行排序。在

我想用日期和日期来连接它,但是我想用日期来连接它。在


Tags: 字符串列表排序子串绳子abc10
2条回答

只需调用sorted(),并将key参数设置为一个函数,该函数从字符串中提取日期并将其转换为datetime.datetime对象。在

>>> from datetime import datetime
>>> a = ["08/19/2014100%ABC10/02/2014F","02/12/2012100%ABC10/02/2014F", "08/29/2014100%ABC10/02/2012F"]
>>> sorted_a = sorted(a, key=lambda s: datetime.strptime(s[:10], '%m/%d/%Y'))
>>> sorted_a
['02/12/2012100%ABC10/02/2014F', '08/19/2014100%ABC10/02/2014F', '08/29/2014100%ABC10/02/2012F']

或者,如果您想就地排序:

^{pr2}$

如果您真的想按字符串中的最后一个日期排序,只需将key函数更改为:

^{3}$

下面的代码定义了一个自定义排序函数compare,它从列表中提取两个元素,并根据每个字符串开头出现的日期对它们进行排序。如果要使用嵌入在字符串末尾的日期,可以相应地修改代码。在

def compare(item1, item2):
    format = '%m/%d/%Y' #changed the date format
    # convert string dates to Date type
    date1 = datetime.datetime.strptime(item1[:10], format).date() #removed comma from item1[:,10]
    date2 = datetime.datetime.strptime(item2[:10], format).date() #same as above

    if date1 < date2:
        return -1
    elif date1 > date2:
        return 1
    else:
        return 0

a = ["08/19/2014100%ABC10/02/2014F","02/12/2012100%ABC10/02/2014F",
  "08/29/2014100%ABC10/02/2012F"]

a.sort(compare)

相关问题 更多 >

    热门问题