【问题标题】:Python & Sorting : Sorting Elements In Order Their Subelements in an ArrayPython & 排序:按数组中子元素的顺序对元素进行排序
【发布时间】:2019-09-01 21:14:41
【问题描述】:

我有一个数组,它有 4 个元素,每个元素都有 3 个子元素;

myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]

如您所见,每个元素的第一个子元素都是日期。我想订购这些元素及其日期。所以我想要输入print(myList)时的那个输出;

[['26.03.2019', 'Michelle', '8'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8'], ['03.04.2019', 'Jack', '2']]

我该怎么做?你能给我一个解决方案吗?

【问题讨论】:

    标签: python arrays python-3.x sorting datetime


    【解决方案1】:

    print(myList) 只会打印您的列表。你不想摆弄那个。您要做的是在打印之前对列表进行排序。比如这样:

    import datetime
    
    
    myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]
    myList.sort(key=lambda sublist: datetime.datetime.strptime(sublist[0], "%d.%m.%Y"))
    
    print(myList)  # -> [['26.03.2019', 'Michelle', '8'], 
                   #     ['01.04.2019', 'George', '2'], 
                   #     ['02.04.2019', 'Micheal', '8'], 
                   #     ['03.04.2019', 'Jack', '2']]
    

    请注意,执行myList.sort(..) 会永久更改您的列表。如果这不是您想要的,您可以使用sorted 创建一个新列表,正如@Rakesh 在他的回答中所建议的那样。


    荣誉:日期排序代码取自here

    【讨论】:

      【解决方案2】:

      将字符串日期转换为日期时间对象,然后使用sorted

      例如:

      import datetime
      myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]
      
      print( sorted(myList, key=lambda x: datetime.datetime.strptime(x[0], "%d.%m.%Y")) )
      

      输出:

      [['26.03.2019', 'Michelle', '8'],
       ['01.04.2019', 'George', '2'],
       ['02.04.2019', 'Micheal', '8'],
       ['03.04.2019', 'Jack', '2']]
      

      【讨论】:

        【解决方案3】:

        通过 strptime 将列表更改为 datetime 对象后,按日期字符串对列表进行排序

        import datetime
        myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]
        
        myList.sort(key=lambda x: datetime.datetime.strptime(x[0], "%d.%m.%Y"))
        print(myList)
        #[
        #['26.03.2019', 'Michelle', '8'], 
        #['01.04.2019', 'George', '2'], 
        #['02.04.2019', #'Micheal', '8'], 
        #['03.04.2019', 'Jack', '2']
        #]
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-22
          • 1970-01-01
          • 2016-02-01
          • 2015-06-21
          • 2019-09-02
          • 1970-01-01
          • 2015-10-18
          相关资源
          最近更新 更多