列表日期排序 python_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])

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 经典排序算法

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

python sorted排序

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

python 常见排序实例

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

Python的排序

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

python 字典排序 关于sort&lpar;&rpar;、reversed&lpar;&rpar;、sorted&lpar;&rpar;

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

Python日期时间函数处理

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

Python 日期和时间&lpar;转&rpar;

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

python sorted排序用法详解

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

&lpar;转&rpar;Python 日期和时间

转自http://www.runoob.com/python/python-date-time.html Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见 ...

随机推荐

查看 Apache并发请求数及其TCP连接状态

查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...

51nod 1007 正整数分组

将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.   Input 第1行:一个数N,N为正整数的数量 ...

xcode开发的6个小技巧

Xcode是iPhone和iPad开发者用来编码或者开发iOS app的IDE.Xcode有很多小巧但很有用的功能,很多时候我们可能没有注意到它们,也或者我们没有在合适的水平使用这些功能简化我们的iO ...

录制iphone手机视频

1: 升级自己的手机到ios8, 同时mac os也要升级到10.10 2: 用usb数据线将手机连上电脑. 3: 打开quicktime player创建新movie 4: 选择手机作为音频.视频源 ...

typeof和instanceof 运算符

instanceof运算符与typeof运算符相似,用于识别正在处理的对象的类型,但是在使用 typeof 运算符时采用引用类型存储值会出现一个问题. 无论引用的是什么类型的对象,它都返回 &quot ...

Android之Material Dialogs详解

文章大纲 一.什么是Material Dialogs二.Material Dialogs实战三.项目源码下载   一.什么是Material Dialogs   Material Dialogs是一个 ...

解决:在微信中访问app下载链接提示&OpenCurlyDoubleQuote;已停止访问该网页”

前言 现如今微信对第三方推广链接的审核是越来越严格了,域名在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,要不然就是换个域名再推,周而复始.无论是哪一种情况都会面 ...

angular实操

一.创建angular工程(一定要在管理员权限下运行,Windows可忽略) 1.安装angular CLi 在终端窗口打开想要创建的工程所在文件夹,如:Cd Desktop\Angular-proj ...

java多线程分块上传并支持断点续传最新修正完整版本&lbrack;转&rsqb;

package com.test; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.Fi ...

mongoDB 删除集合后,空间不释放

mongoDB 删除集合后,空间不释放,添加新集合,没有重新利用之前删除集合所空出来的空间,也就是数据库大小只增不减. 方法有: 1.导出导入 dump & restore 2.修复数据库 r ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值