转自: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. python学习之路---day23--模块

    模块基本小结if __name__ == '__main__':一:import 引入模块模块:是一个包含python定义和声明的文件,文件名就是模块名字加上.py后缀,所有的py文件都可以看成是一个 ...

  2. Python web前端 02 CSS

    Python web前端 02 CSS 一.选择器 1.CSS的几种样式(CSS用来修饰.美化网页的) #建立模板 复制内容--->SETTING---> Editor -----> ...

  3. C++_类和动态内存分配6-复习各种技术及队列模拟

    知识点: 队列:是一种抽象的数据类型(Abstract Data Type),可以存储有序的项目序列. 新项目被添加在队尾,并可以删除队首的项目.队列有些像栈.栈是在同一端进行添加和删除.这使得栈是一 ...

  4. 浅谈C#数组(一)

    如果需要使用同一类型的多个对象,可以使用数组和集合(后面介绍).C#用特殊的记号声明,初始化和使用数组.Array类在后台发挥作用,它为数组中的元素排序和过滤提供了多个方法.使用枚举器,可以迭代数组中 ...

  5. HDU - 4035 循环型概率DP

    题解待会在上 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring ...

  6. [转] iOS开发者的Weex伪最佳实践指北

    [From] http://www.cocoachina.com/ios/20170601/19404.html 引子 这篇文章是笔者近期关于Weex在iOS端的一些研究和实践心得,和大家一起分享分享 ...

  7. List<Type> 随机排序

    public List<T> GetRandomList<T>(List<T> inputList){ //Copy to a array T[] copyArra ...

  8. SpringMVC HandlerMethodArgumentResolver自定义参数转换器

    来源: https://www.cnblogs.com/daxin/p/3296493.html 自定义Spring MVC3的参数映射和返回值映射 + fastjson首先说一下场景:在一些富客户端 ...

  9. GCD - Extreme(欧拉函数变形)

    题目链接:https://vjudge.net/problem/UVA-11426 题目大意: 给出整数n∈[2,4000000],求解∑gcd(i,j),其中(i,j)满足1≤i<j≤n. 的 ...

  10. 【Tensorflow】 Object_detection之liunx服务器安装部署步骤记录

    环境:centos7+anaconda python3.6 步骤: 1.下载Models cd 到预存放目录下,执行: git clone https://github.com/tensorflow/ ...