转自: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

python 日期排序的更多相关文章

  1. python 经典排序算法

    python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...

  2. Python自定义排序及我实际遇到的一些题目实例

    写在前面,本文主要介绍Python基础排序和自定义排序的一些规则,如果都比较熟悉,可以直接翻到第三节,看下实际的笔试面试题中关于自定义排序的应用. 一.基础排序 排序是比较基础的算法,与很多语言一样, ...

  3. python sorted排序

    python sorted排序 Python不仅提供了list.sort()方法来实现列表的排序,而且提供了内建sorted()函数来实现对复杂列表的排序以及按照字典的key和value进行排序. s ...

  4. python 常见排序实例

    使用Python 基础排序算法设计,冒泡排序,插入排序,快速排序... 需求 对一组无序数据进行排序算法设计,要求如下: 输入:[1, 3, 5, 23, 75, 34, 456, 86, 22, 7 ...

  5. Python的排序

    1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I' ...

  6. python 字典排序 关于sort()、reversed()、sorted()

    一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...

  7. Python日期时间函数处理

    所有日期.时间的 api 都在datetime模块内. 1 日期的格式化输出 datetime => string import datetime now = datetime.datetime ...

  8. Python 日期和时间(转)

    Python 日期和时间 Python程序能用很多方式处理日期和时间.转换日期格式是一个常见的例行琐事.Python有一个 time 和 calendar 模组可以帮忙. 什么是Tick? 时间间隔是 ...

  9. python sorted排序用法详解

    sorted排序 python sorted 排序 1. operator函数在介绍sorted函数之前需要了解一下operator函数. operator函数是python的内置函数,提供了一系列常 ...

随机推荐

  1. docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers).

    docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled ...

  2. ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

    用 SQL*Plus 连接数据库的时候,除了用户名和密码外,还要在口令后面加一个主机字符串.如下: 请输入用户名:sys 口令:ANKoracle123,orcl as sysdba

  3. POJ1475 Pushing Boxes 华丽丽的双重BFS

    woc累死了写了两个半小时...就是BFS?我太菜了... 刚开始以为让人预先跑一遍BFS,然后一会儿取两节加起来就好了,结果发现求出来的最短路(就是这个意思)会因箱子的移动而变化....我死了QWQ ...

  4. C++ STL之Vector

    向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. vector 属于STL(Standard Template Library, 标准模板库)中的一种自定义的 ...

  5. tp5.0

    入口文件绑定 : define('BIND_MODULE','admin/index'); 配置 auto_bind_moudle = ture|false.  入口自动绑定模块 入口文件 defin ...

  6. Oracle date和timestamp区别

    <转自> http://blog.csdn.net/huaguoming/article/details/8693679 在今天的工作中,学到了以下几个知识点: 一.date和timest ...

  7. kpw2使用心得

    一:截屏 只需要同时按下对角线的两个点(比如左下角,右上角)就可以,图片可以通过数据线连接到电脑,在根目录下就可以查看截屏图片. 二:拖曳电子书pdf 可以通过数据线连接,找到kpw2的磁盘,将pdf ...

  8. Mavne 打包时出现程序包找到不的问题

    <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactI ...

  9. C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)

    最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...

  10. android device ID获取

    Android  Device ID是Android用户在Google认证过手机的设备唯一标识,当然国内很多Android手机没有经过Google认证,所以一般没有Google官方Android de ...