转自: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. 【Leetcode】Divide Two Integers

    Divide two integers without using multiplication, division and mod operator. class Solution { public ...

  2. JavaScript的高级知识---词法分析

    JavaScript的高级知识---词法分析 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 函数在运行的瞬间, ...

  3. QQ在线状态的使用

    在网页中显示QQ在线状态并点击后发起对话,是很多门户网站常见的一个功能,这两天就碰到这样一个.原以为很简单,结果还是折腾了半天,虽然是个小问题,但也值得记录一下. 按以前的经验,网上有很多QQ在线代码 ...

  4. 正则表达式中模式修正符作用详解(i、g、m、s、x、e)

    下面的转:http://www.cnblogs.com/shunyao8210/archive/2008/11/13/1332591.html 总结1:附件参数g的用法 表达式加上参数g之后,表明可以 ...

  5. poj3176

    一.题意:给定一些数,成三角形排列.从上往下走,每个数只能往它相邻的两个数走,一直走到底端得到一条线路.这条线路上的数的和最大是多少 二.思路:简单的动态规划.dp[i+1][j+1]:=以第i+1行 ...

  6. jq api --css

    .css() $("p").css("color","red"); $("p").css({ "color&q ...

  7. TabLayout实现顶部导航栏(1)

    TabLayout是android.support.design里的一个控件,使用它可以很方便的做出顶部导航和底部导航.类似于这样的,能设置选中时字体的颜色和选中时的图片. 首先我们在 build.g ...

  8. (转)Linux磁盘空间监控告警 && Linux磁盘管理

    Linux磁盘空间监控告警 http://blog.csdn.net/github_39069288/article/details/73478784-----------Linux磁盘管理 原文:h ...

  9. c#委托、泛型、反射的使用情况

    委托:当你传递的参数不是 变量 时,想把一个方法作为参数传递,此时委托就可以做到这点 泛型:当你传递的参数是一个类时,此时用泛型 反射:都说反射是一种耗时的操作,但是却很有用,所以反射他不是拿来滥用的 ...

  10. Android模拟器访问本机服务器

    Android模拟器访问本机服务器,用127.0.0.1访问不到,因为127.0.0.1已经被映射到模拟器了. 可以用以下两种方式访问 1. 用 10.0.2.2 2. 直接用 本机的IP地址,如:1 ...