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]
- >>> temp_list.sort()
- >>> str_list = [x[1] for x in temp_list]
- >>> 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))
- >>> 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))
- >>> 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']))
如果你还有什么关于排序的问题需要解决,欢迎留言!
分享到:
相关推荐
知识点六:快速排序算法的Python实现 快速排序是一种高效的排序算法,通过选择一个基准元素,将数组分为两个子数组,一个包含所有小于基准的元素,另一个包含所有大于基准的元素。Python代码简洁地实现了这一算法,...
本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下: Python版本: python3.+ 运行环境: Mac OS IDE: pycharm Python内建的排序方法 1 排序方法介绍 Python中有2个...
本文将详细介绍九种常见的排序算法,包括冒泡排序、桶排序、计数排序、堆排序、插入排序、合并排序、快速排序、基数排序和选择排序,并特别关注Python语言的实现。 1. **冒泡排序**:这是一种简单的排序算法,通过...
内容概要:本文详细介绍了冒泡排序的基本原理与步骤、提供了一个具体的 Python 示例以及对算法的时间和空间复杂度进行了讨论。通过对比不同情形下冒泡排序的表现,探讨其优势和不足之处。 适合人群:面向所有对编程...
《Python算法 - 精通Python语言的基本算法》是一本深入浅出的Python算法书籍,旨在帮助读者掌握Python编程中的核心算法。通过阅读本书,你可以了解到如何利用Python这一强大而简洁的语言来解决各种计算问题。博客...
`sort()` 方法是 Python 列表中非常实用且功能强大的排序工具,它不仅可以对简单类型的列表进行排序,还可以通过灵活运用 `key` 和 `reverse` 参数来实现更复杂的排序需求。掌握 `sort()` 方法的使用,对于提高 ...
知识点:Python 数据结构,列表排序,算术运算符 二、程序题 1. 简易计算器: 知识点:Python 函数,算术运算符,用户交互 这些题目涵盖了 Python 基础语法、数据类型、变量、控制结构、函数、模块等知识点,...
冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
为了解决这个问题,Python社区开发了`sortedcontainers`模块,这是一个高效且完全实现了所有标准容器类型的排序扩展。本篇将详细介绍`sortedcontainers`库,以及它如何为Python的列表、字典和集合提供排序功能。 ...
- 排序算法:冒泡排序、选择排序、插入排序、快速排序等。 - 查找算法:线性查找、二分查找。 - 数组操作:如寻找最大值、最小值、计算平均值等。 5. 文件操作: - 打开和关闭文件:open()函数和close()方法。...
Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。它是由荷兰人吉多·罗萨姆于1989年发布的,第一个公开发行版发行于1991年。Python注重解决问题的方法,而不是语法和结构。它被广泛应用于各个...
快速排序:如何使用Python实现快速排序+编程知识+技术开发; 快速排序:如何使用Python实现快速排序+编程知识+技术开发; 快速排序:如何使用Python实现快速排序+编程知识+技术开发; 快速排序:如何使用Python实现...
算法部分则包括排序(如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等)、搜索(如线性搜索、二分搜索)、图算法(如深度优先搜索DFS、广度优先搜索BFS、最短路径算法Dijkstra和Floyd)以及动态规划...
希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:...
- **算法和数据结构**:涵盖排序、搜索、动态规划等算法,以及优化内存效率的方法。 - **字符串操作**:展示高级字符串处理技巧,如正则表达式、模式匹配和文本解析。 - **函数和模块化**:讨论函数式编程技术,...
上海交大程序设计python期末考试题库 选择题 1. 表达式 '%d%%%d' %,3%4>的值是: 知识点:python基本语法,字符串格式化 ...解释:python列表可以使用for循环遍历,程序的执行结果是将列表中的元素按升序排序。
1. 冒泡排序:Python实现冒泡排序的关键在于两两比较相邻元素并交换,通过多次遍历达到排序目的。其时间复杂度为O(n^2)。 2. 插入排序:Python中插入排序通过将元素插入已排序部分来完成排序,适合小规模数据或部分...
堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和...