- 浏览: 577987 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (206)
- Flask (1)
- JavaScript (3)
- Core Java (41)
- XML (1)
- Oracle (11)
- 软件安装及环境配置 (0)
- 其它 (9)
- 面试/笔试 (5)
- 项目 (0)
- JDBC (11)
- Servlet (4)
- MySql (4)
- JNDI (0)
- Hibernate (11)
- Java模式和构架设计 (0)
- Web设计 (22)
- JSP (8)
- Struts (13)
- Tomcat (2)
- Marven (2)
- SVN (2)
- Swing/AWT (1)
- jQuery (2)
- ExtJS (8)
- Python (22)
- Flex (1)
- Django (7)
- 算法 (5)
- English (1)
- Twisted (1)
- Linux (3)
- Rails (1)
- SVG (3)
- PostgreSQL (1)
1.字符串列表排序
列表的排序是python内置功能,自身含有sort方法 。如果元素是字符串,会分解成字符比较,而字符的大小是根据字符对应ascii码的大小。
>>> str_list = ['spring', 'summer', 'autumn', 'winter'] >>> str_list.sort() >>> print str_list ['autumn', 'spring', 'summer', 'winter']
>>> str_list = ['aB', 'Ab', 'AB', 'ab'] >>> str_list.sort() >>> print str_list ['AB', 'Ab', 'aB', 'ab']
>>> str_list = ['a123', 'B123', 'c123'] >>> str_list.sort() >>> print str_list ['B123', 'a123', 'c123']
如果忽略大小字母,让上面结果显示为:['a123', 'B123', 'c123']。怎么做了?
很容易想到DSU用法,decorate-sort-undecorate封装-排序-解封,既简单又快速:
>>> str_list = ['c123', 'a123', 'B123'] >>> temp_list = [(x.lower(), x) for x in str_list] #decorate >>> temp_list.sort() #sort >>> str_list = [x[1] for x in temp_list] #undecorate >>> print str_list ['a123', 'B123', 'c123']
这是一种重要的编程思想,你现在所处的情景,你想要的结果,你要做的就是搭一座桥梁,让两者之间可以联通!这是的桥梁就是temp_list。
如果你确定列表中的元素都是字符串,而且你使用的是Python2.4以上版本,那么使用sorted方法来得更简单:
>>> str_list = ['c123', 'a123', 'B123'] >>> sorted(str_list, key=str.lower) >>> str_list = sorted(str_list, key=str.lower) ['a123', 'B123', 'c123']
这里我提示一点sorted方法并没有直接作用于目标列表,而是返回一个排序后的列表。如果你知道排序的是unicode对象列表,可以使用key=unicode.lower,或者key = lambda s: s.lower()
这里给你补充点知识:
python有三种字符串类型:str、unicode、basestring。basestring是抽象类,不能实例化,str和unicode是basestring的子类。普通字符串str怎么转换为Unicode字符串?'Hello'+u' '+'World' 这样就行了,连接中有一个是unicode字符串,结果都为unicode字符串。如果你想知道得更详细,我会写另一篇文章。
lambda 是匿名函数,python中非常有用的一个函数,掌握它对你受益匪浅。
这里你会不禁赞叹python的强大,简单而且优美。程序就是一件艺术品,python无疑是一把优质的雕琢刀,而你的地位恰好是雕塑家。成功与否,不是取决于雕琢刀的好坏,而是你雕刻的方法,这正是我们应该学习的!
也许上面两种方法你都没有想到,你想到的是:难道不能重新构造比较方法cmp()吗?
>>> def mycmp(a, b): return cmp(a.lower(), b.lower()) >>> str_list = ['c123', 'a123', 'B123'] >>> str_list.sort(mycmp) >>> print str_list ['a123', 'B123', 'c123']
不知你发现没有,每两个元素进行比较都会执行两次lower()方法,如果列表中元素为n,那要执行多少次lower()?虽然不推荐这样做,但也给我们提供了一种思路,如果不是字符串列表,而是结构很复杂的数据列表,我们就可以采用这样方法!
2.数字列表排序
>>> num_list = [12, 43, 11, 23, 9] >>> num_list.sort() >>> print num_list [9, 11, 12, 23, 43]
小数也同样适用
>>> num_list = [12, 43.4, 11.5, 23.0, 9.1] >>> num_list.sort() >>> print num_list [9.1, 11.5, 12, 23.0, 43.4]
我用的是Python2.7,如果你使用是其他版本,可能会出现不同的结果,如:9.1变成9.100000000001 。这涉及到python中小数是怎么存储的,这里就不多说了!
3.字典数据排序
学Java的人都知道Map,而字典就是Python中的“Map”,键值对映射。字典中元素的存储是无序的,怎么对字典数据进行排序?
>>> mydict = {"A01":"first", "A14":"second", "Aa1":"third"} >>> print mydict {'A14': 'second', 'A01': 'first', 'Aa1': 'third'} >>> items = mydict.items() >>> print items [('A14', 'second'), ('A01', 'first'), ('Aa1', 'third')] >>> items.sort() >>> print items [('A01', 'first'), ('A14', 'second'), ('Aa1', 'third')] >>> new_list = [value for key, value in items] >>> print new_list ['first', 'second', 'third']
前3行说明字典中元素存储是无序的,你构造的字典和实际存储的字典 里元素的顺序并不一样!字典的items()方法能够把字典转换为元组的列表,再对元组列表进行排序,得到自己想要的结果。
另一种思路:得到字典key列表,排序后,依次取出value,构造成列表就是你的结果。
>>> mydict = {"A01":"first", "A14":"second", "Aa1":"third"} >>> keys = mydict.keys() >>> keys.sort() >>> new_list = [mydict[key] for key in keys] >>> print new_list ['first', 'second', 'third']
通过映射的方法更有效的执行最后一步
>>> mydict = {"A01":"first", "A14":"second", "Aa1":"third"} >>> keys = mydict.keys() >>> keys.sort() >>> new_list = map( mydict.get,keys ) >>> print new_list ['first', 'second', 'third']
利用lamdba函数,选择根据key或value排序
>>> sorted(mydict.items(), key=lambda d:d[0]) [('A01', 'first'), ('A14', 'second'), ('Aa1', 'third')] >>> mydict = {"A01":"first", "A14":"second", "Aa1":"third"} >>> sorted(mydict.items(), key=lambda d:d[0]) [('A01', 'first'), ('A14', 'second'), ('Aa1', 'third')] >>> sorted(mydict.items(), key=lambda d:d[1]) [('A01', 'first'), ('A14', 'second'), ('Aa1', 'third')] >>> print mydict {'A14': 'second', 'A01': 'first', 'Aa1': 'third'}
4.对象排序
>>> class Sortobj: a = 0 b = '' def __init__(self, a, b): self.a = a self.b = b def printab(self): print self.a, self.b >>> obja = Sortobj(343, 'keen') >>> objb = Sortobj(56, 'blue') >>> objc = Sortobj(2, 'aba') >>> objd = Sortobj(89, 'iiii') >>> obj_list = [obja, objb, objc, objd] >>> for obj in obj_list: obj.printab() 343 keen 56 blue 2 aba 89 iiii >>> obj_list.sort(lambda x,y: cmp(x.a, y.a)) #按对象的a属性进行排序 >>> for obj in obj_list: obj.printab() 2 aba 56 blue 89 iiii 343 keen >>> obj_list.sort(lambda x,y: cmp(x.b, y.b)) #按对象的b属性进行排序 >>> for obj in obj_list: obj.printab() 2 aba 56 blue 89 iiii 343 keen
5.字典列表排序
元素全是字典的列表,如何排序?其实把上面的方法综合起来就能实现:
input = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10},{'name': 'Wang', 'age':10},{'name': 'Ab', 'age':10}] print input input.sort(lambda x,y : cmp(x['name'], y['name'])) print input
如果想降序排列,
input.sort(lambda x,y : -cmp(x['name'], y['name']))
如果你还有什么关于排序的问题需要解决,欢迎留言!
发表评论
-
sqlalchemy note
2012-09-10 22:47 13771 # 父表插入记录出错,NotSupportedEr ... -
python note
2012-09-07 11:49 14281.func(**{'type':'Event'}) 等价于f ... -
note
2012-09-03 20:10 1654安装easy_install 安装pip easy_i ... -
with 和 if-else条件表达式
2012-07-22 11:09 1624对于要确保即使发生一个错误时也能运行一些清理代码而言,try. ... -
Python 线程
2012-02-21 12:01 13871.创建线程 通过继承threading模块中的Thread ... -
Python面向对象笔记
2012-02-20 17:18 13781.特殊的类属性 对任何类,都有下面特殊属性: ... -
socket模块
2012-02-20 12:09 14081.socket(family, type) 创建套接字对象 ... -
Python datetime模块
2012-02-18 12:33 9281datetime模块的所有类的对象都是不可变的。 da ... -
Python time模块
2012-02-17 18:20 1069底层C语言库决定了time模块可以处理的日期范围。 c ... -
发送邮件
2012-01-14 19:59 12081.使用smtplib #encoding=utf-8 ... -
Python文件操作
2012-01-14 16:26 1080一.os模块常用操作函数 remove()/unlin ... -
Python单例模式
2012-01-13 22:12 3552方法一 import threading cla ... -
Python异常
2012-01-13 19:11 24731.常用异常名 AttributeError 调用不 ... -
列表和元组
2012-01-12 13:57 15591.列表常用操作 list.append(x) 追加 ... -
字符串
2012-01-12 13:19 14561.字符串常用操作: ... -
Python基础笔记
2012-01-14 16:31 11661.环境变量设置: 编辑系统变量Path,添加两 ... -
版本控制Mercurial(hg)
2011-11-12 16:07 3137简介 ... -
Python Excel Tutorial (一):xlrd的安装和读取Excel文件
2011-09-16 22:49 52072Python Excel Tutorial 指南 安装 有 ... -
ChartDirector在Pythonr下的安装
2011-08-27 17:38 17791、在C:/python27/Lib/site_pack ... -
我的第一个Python Web应用
2011-07-05 16:02 3947本文实现的是通信录的Web应用,在Windows xp环 ...
相关推荐
"Python排序"是Python编程中的一个核心概念,涉及到对数据序列进行排列的算法。本篇将深入探讨Python中的排序方法及其应用场景。 首先,Python内置了一个非常强大的排序函数`sorted()`,它可以对任何可迭代对象进行...
Python 排序算法和函数介绍 Python 提供了多种排序算法和函数,可以快速、方便地对列表、元组等序列进行排序。在本文中,我们将介绍几种常用的排序方法: 1. 使用 sorted() 函数 sorted() 函数可以对任意可迭代...
"19298658_DSA_Prac_01_python排序_"这个标题暗示了一个关于Python编程语言的排序算法实践练习。描述提到有三种排序算法被涉及,这可能包括一些最常用的算法,比如冒泡排序、插入排序和选择排序。这些算法是理解和...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
下面我们将逐一探讨Python中的五种主要排序算法:冒泡排序、插入排序、选择排序、快速排序以及归并排序。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素来逐步排序。它的主要...
本文将详细介绍几种常见的排序算法及其在Python中的实现,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。 排序算法是数据处理中不可或缺的一部分,Python提供了多种方式来实现排序,包括内置的高效排序...
本文将详细讨论在Python中实现的三种基本排序算法:冒泡排序、选择排序和插入排序,这些都是`light9m6`提供的教学资源。 首先,我们来了解冒泡排序(Bubble Sort)。这是一种简单直观的排序算法,它重复地遍历要...
排序算法汇总的有经常用到的冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序七种,代码可以直接测试。
在Python编程语言中,有一组特别的容器类型,它们提供了排序功能,这使得在处理大量数据时更加方便和高效。这些容器包括SortedList、SortedDict和SortedSet,它们都属于Sorted Containers库的一部分。Sorted ...
python排序算法:
包含一个A股公司与市值的execle表格,python程序对这些公司进行排序。pd.read_excel读取execle数据,之后对每个行业分开处理,找到当前查找这个行业的所有公司,依据市值排序,取出前4名公司。
排序文件,将图片和xml文档进行排序。
1. 冒泡排序(Bubble Sort) def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] 2. 插入排序(Insertion Sort...
本文实例讲述了python实现忽略大小写对字符串列表排序的方法,是非常实用的技巧。分享给大家供大家参考。具体分析如下: 先来看看如下代码: string = ''' the stirng Has many line In THE fIle jb51 net ''' list...
包含多种Python的排序算法,可以帮助使用者更好的理解各种排序算法的Python实现!
Python 算法 快速排序.py
Python中的排序算法是编程中非常基础且重要的概念,它们用于对数据进行有序排列。下面将对几种常见的排序算法进行详细讲解,并提供相应的Python实现。 1. **归并排序(Merge Sort)** 归并排序是一种基于分治策略的...
### Python排序搜索基本算法之希尔排序实例分析 #### 希尔排序简介 希尔排序(Shell Sort)是一种基于插入排序的高效算法。它通过将原始数组分割成多个子数组,并分别对这些子数组进行插入排序,从而提高了排序的...
可包含重复值的列表排序算法 返回值为: 排序后数据的新列表(从小到大/从大到小) 排序后数据在原列表中的索引列表(从小到大/从大到小) 原列表的数据量