zoukankan      html  css  js  c++  java
  • python 日期排序

    转自:http://www.cnblogs.com/lkprof/p/3179850.html,感谢分享~

    问题1:如果日期中有千年以前的情况(没法用格式化函数),如('2010-11-23','1989-3-7','2010-1-5','978-12-1','2010-2-4')参照方法1

    问题2:如果日期中没有千年以前的情况,做法就很多了。参照方法2和方法3

    复制代码
     1 # -*- coding: utf-8 -*-
     2 import time
     3 from operator import itemgetter
     4 arr=('2010-11-23','1989-3-7','2010-1-5','978-12-1','2010-2-4')
     5 def date_sort1(x):
     6     ls=list(x)
     7     #用了冒泡排序来排序,其他方法效果一样
     8     for j in range(len(ls)-1):
     9         for i in range(len(ls)-j-1):
    10             lower=ls[i].split('-')
    11             upper=ls[i+1].split('-')       
    12             for s in range(3):
    13                 if int(lower[s])>int(upper[s]):                
    14                     ls[i],ls[i+1]=ls[i+1],ls[i]
    15                     break
    16                 elif int(lower[s])<int(upper[s]):
    17                     break
    18     ar=tuple(ls)
    19     return ar  
    20 ar=('2010-11-23','1989-3-7','2010-2-4','2010-1-5')
    21 def date_sort2(x):
    22     ls=list(x)
    23     dic={}
    24     for l in ls:
    25         #返回用秒数来表示时间的浮点数
    26         dic[l]=time.mktime(time.strptime(l, '%Y-%m-%d'))
    27     
    28     dic=sorted(dic.iteritems(), key=itemgetter(1))
    29     sorted_items=[keys[0] for keys in dic]
    30     '''
    31     items=dic.items() 
    32     backitems=[[v[1],v[0]] for v in items] 
    33     backitems.sort() 
    34     sorted_items=[keys[1] for keys in backitems] 
    35     '''
    36     '''
    37     items=dic.items() 
    38     backitems=[[v[0],v[1]] for v in items] 
    39     backitems=sorted(backitems, key=lambda x : x[1])   
    40     sorted_items=[keys[0] for keys in backitems] 
    41     '''
    42     return tuple(sorted_items)
    43 import datetime
    44 def date_sort3(x):
    45     ls=list(x)
    46     #用了冒泡排序来排序,其他方法效果一样
    47     for j in range(len(ls)-1):
    48         for i in range(len(ls)-j-1):
    49             lower=datetime.datetime.strptime(ls[i], '%Y-%m-%d')
    50             upper=datetime.datetime.strptime(ls[i+1], '%Y-%m-%d')
    51             if lower>upper:
    52                 ls[i],ls[i+1]=ls[i+1],ls[i]
    53     return tuple(ls)
    54 print date_sort1(arr)         
    55 print date_sort2(ar)
    56 print date_sort3(ar)
    复制代码

    运行结果:

    ('978-12-1', '1989-3-7', '2010-1-5', '2010-2-4', '2010-11-23')
    ('1989-3-7', '2010-1-5', '2010-2-4', '2010-11-23')
    ('1989-3-7', '2010-1-5', '2010-2-4', '2010-11-23')

    正则表达式同样可以处理这类问题,下面是正则表达式的解决方案。

    复制代码
     1 #利用正则表达式
     2 import re
     3 
     4 data = ['2010-11-23','1989-3-7','2010-1-5','978-12-1','2010-2-4']
     5 patt = '(d+)-(d+)-(d+)'
     6     #交换排序
     7 for i in range(len(data)-1):
     8     for x in range(i+1, len(data)):
     9         j = 1
    10         while j<4:
    11             lower = re.match(patt, data[i]).group(j)
    12             upper = re.match(patt, data[x]).group(j)
    13             #print lower,upper
    14             if int(lower) < int(upper):
    15                 j = 4
    16             elif int(lower) == int(upper):
    17                 j += 1
    18             else:
    19                 data[i],data[x] = data[x],data[i]
    20                 j = 4
    21 print data
    复制代码
  • 相关阅读:
    JS学习笔记-OO疑问之对象创建
    文件系统类型:
    Swift 编程语言新手教程
    数组长度计算
    tomcat配置文件server.xml具体解释
    openGL点精灵PointSprite具体解释: 纹理映射,旋转,缩放,移动
    iOS安全攻防(三):使用Reveal分析他人app
    逍遥叹
    oracle存储过程实例
    Java爬虫
  • 原文地址:https://www.cnblogs.com/baiting/p/7110180.html
Copyright © 2011-2022 走看看