一、pthone 排序
1、[].sort 排序:
在Python里,可以使用`[].sort`实现默认的自然排序,其效率还不错。
2、自定义函数排序:
列表排序的顺序只是适用自然顺序,很多时候,你需要特定的顺序。比如需要排序的字段不是第一个字符,按照默认排序是毫无意义的。通过定义一个自定义函数返回-1则表示前者排在后者之前,返回0则表示二者顺序相同,返回1则表示后者排在前者之前,可以实现自己排序规则。 `cmp()`就是`[].sort()`的默认比较函数(在速度上'lst.sort()'远远超过'lst.sort(cmp)')。对于不太长的列表使用自定义比较函数可以快速的解决问题。
在很多情况下,甚至可以直接使用一个'lambda'表达式来完成任务。 说到速度,使用自定义比较函数效率会很低。部分原因是Python的函数调用开销,函数本身也会增加花费的时间。不过有一种技术“Schwartzian转换”可以加速这种自定义排序。
二、Schwartzian转换原理:
Schwartzian转换是兰德尔施瓦兹在Perl中最先开始使用的,但其中的技巧同样适用于Python。 使用Schwartzian转换主要包括三个步骤,(准确的来说这是Guttman-Rosler转换(GRT),同样基于Schwartzian转换)
- 将列表转换为可以用默认排序的列表。
- 使用`[].sort()`排序。
- 转回原先的格式。
核心是将需要排序的对象转为一个能进行自然排序的字符串,任务里排序时间是主要因素的话,使用这项技术将大大提高效率(唯一的限制就是转换花费的时间不会很多)
三、实例:
考虑一个真实的案例:
我们的网站每个关键页面的访问都会有Cookie Log进行记录,Cookie log记录了用户的真实IP,访问的URL,时间等用户访问信息,每个应用是通过vip技术负载均衡到后面的具体的应用里面,Cookie log是通过Apache的module进行记录,由于并发,日志写入是并不是有序的,我们现在需要安装访问时间排序,以方便分析日志。真实的一行记录如下:
46.72.70.123 - - - [12/Sep/2012:23:59:50 -0700] "GET /www.xxx.com tm?productId=593651545&rnd=134 5370HTTP/1.1" 200 2131 82269 "http://www.xxx.com/ite545.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" - - "a=mt=1|ms=|mid=ru1012642554; b=W_signed=Y; c=-"–
为了简单我们只取出时间不分排序,假设文本文件如下格式:
12/Sep/2012:23:59:50 12/Sep/2012:23:59:50
考虑可以将12/Sep/2012:23:59:50 转换为 20120912235950 然后按照自然排序就好了。
代码如下:
import sys, string, time, datetime wrerr = sys.stderr.write def get_Time(str): print len(str) print str time = datetime.datetime.strptime(str,'%d/%b/%Y:%H:%M:%S') return time.strftime("%Y%m%d%H%M%S") lines = open(sys.argv[1]).readlines() start = time.time() for n in range(len(lines)): lst = string.split(lines[n]) lines[n] = (get_Time(lines[n][:20]), lines[n]) lines.sort() for n in range(len(lines)): lines[n] = lines[n][1] end = time.time() wrerr("Schwartzian transform sort in %3.2f secs\n" % (end-start)) open('time.schwartzian','w').writelines(lines)
核心在于get_Time函数,讲时间转换为可以自然排序的字符串。。
上面真实的场景无非是在该函数的前面先将时间字符串获取,这个想必不难吧。。
参考
http://perl.plover.com/TPC/1998/Hardware-notes.html#Schwartzian_Transform
http://docs.python.org/2/faq/programming.html#i-want-to-do-a-complicated-sort-can-you-do-a-schwartzian-transform-in-python
本站支持 pay for your wishes
相关推荐
python坐标转换程序
Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成...
Python ico文件转换器是一个简单的工具,可以将图像文件转换为 .ico 格式,以便在 Windows 操作系统中使用。这个工具可以帮助你轻松地将常见的图像格式(如 .jpg、.png、.bmp 等)转换为图标文件,当打包程序需要...
Python RGB模式颜色转换器 Python源码Python RGB模式颜色转换器 Python源码Python RGB模式颜色转换器 Python源码Python RGB模式颜色转换器 Python源码Python RGB模式颜色转换器 Python源码Python RGB模式颜色转换器 ...
青少年python学习
在Python编程环境中,声音识别并将其转换为文字是一项常见的任务,尤其在语音识别软件、智能助手和自动会议记录等场景中。本主题将深入探讨如何使用Python实现这一功能,主要涉及以下几个关键知识点: 1. **音频...
python冒泡排序,适合python初学者
0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程....
内容简介:使用python 将excel表格转换为图表,使用GUI界面进行操作,可转换成html网页文件,也可以在html页面保存表格为图片。 此代码文件内,包括了exe执行文件以及源码,可以在任何电脑上执行此exe文件,不需要...
Python作为一个功能强大的编程语言,结合相应的库,可以实现高效的视频格式转换。在这个案例中,我们关注的是使用Python将MP4视频格式转换为AVI视频格式。下面将详细讲解如何实现这一过程,并介绍涉及的关键知识点。...
在Python编程中,有时我们需要处理时间相关的数据,例如将毫秒转换为更易读的时分秒格式。这个任务在处理服务器返回的数据时尤其常见,因为服务器可能以毫秒为单位提供时间戳。本篇文章将深入探讨如何实现这一转换,...
使用python语言读取txt文本,根据分隔符判断,进行数据转换。适用于一个文本需要根据某个字段分隔多个文件的情况
本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下: Python版本: python3.+ 运行环境: Mac OS IDE: pycharm Python内建的排序方法 1 排序方法介绍 Python中有2个...
Python 算法 快速排序.py
Python读取Las点云数据并转换为TXT代码,亲测可用 Python读取Las点云数据并转换为TXT代码,亲测可用 Python读取Las点云数据并转换为TXT代码,亲测可用 Python读取Las点云数据并转换为TXT代码,亲测可用 Python...
本主题涉及的是如何使用Python将大量的TXT文本文件转换成Excel格式,这在数据分析、日志处理或任何需要整理大量文本数据的场景中非常实用。以下是实现这一功能所需的知识点及详细解释: 1. **Python基础**:首先,...
C语言字符串转换为Python字符串的方法 C语言字符串转换为Python字符串是指将C语言中的字符串数据转换为Python中的字符串对象,以便在Python环境中使用。下面详细介绍了C语言字符串转换为Python字符串的方法。 使用...
Python 排序容器Sorted Containers是一个 Apache2 许可的排序集合库,用纯 Python 编写,速度与 C 扩展一样快。Python 的标准库非常棒,直到您需要一个排序集合类型为止。许多人会证明,没有它,您也能走得很远,但...
在Python编程语言中,有一组特别的容器类型,它们提供了排序功能,这使得在处理大量数据时更加方便和高效。这些容器包括SortedList、SortedDict和SortedSet,它们都属于Sorted Containers库的一部分。Sorted ...
本篇文章将深入探讨如何使用Python进行PDF到PPT的转换,并介绍相关知识点。 首先,我们需要了解Python中的两个关键库:`PyPDF2`和`python-pptx`。`PyPDF2`是一个用于处理PDF文件的纯Python库,它可以读取PDF文件并...