Python排列函数:sort、sorted
排序函数介绍:sort()和sorted()都属于Python list的排序方法
区别:sort()属于永久性排列,直接改变该list; sorted属于暂时性排列,会产生一个新的序列。
#sorted()
>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5] #sort()
>>> L = [5, 2, 3, 1, 4]
>>> L.sort()
>>> print L
[1, 2, 3, 4, 5]
#sort后会返回None
def paixu(list):
return list.sort() paixu(['a','f','g','b','a']) #并没输出结果,返回None #sorted后会返回列表
def paixu(list):
return sorted(list) paixu(['a','f','g','b','a']) #输出结果
['a', 'a', 'b', 'f', 'g']
以下对常用的sorted进行介绍:
python 内置的sorted()函数可以对一个list进行排序:
>>> sorted([8,3,8,11,-2])
[-2, 3, 8, 8, 11]
既然说是高阶函数,那么它还可以接受一个key函数来实现自定义的排序,比如按照绝对值大小进行排序:
>>> sorted([8,3,8,11,-9],key=abs)
[3, 8, 8, -9, 11]
key指定的函数将作用于list中的每一个元素上,根据key函数返回的结果进行排序。
来看看字符串排序的问题:
>>> sorted(['abc','Abc','Cba','bAc'])
['Abc', 'Cba', 'abc', 'bAc']
默认的,对于字符串,sorted函数按照ASCII的大小进行排序,因为C<a,大写的C会排在小写的a前面。
如果我们想要达到忽略大小写的排序,只需要更改一下key函数:
>>> sorted(['abc','Abc','Cba','bAc'],key=str.lower)
['abc', 'Abc', 'bAc', 'Cba']
结合lambda关键字按年龄排序:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) #按年龄排序
#输出结果
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
进一步,要进行反向排序,可以传入第三个参数reverse=True:
>>> sorted(['abc','Abc','Cba','bAc'],key=str.lower,reverse=True)
['Cba', 'bAc', 'abc', 'Abc']
sorted()排序的关键在于实现一个映射函数!
练习:
把一句话的每个单词按照开头的字母排序
思路:根据空格用split()把字符串变成list,然后用sort或者sorted排序
# change this value for a different result my_str = "Hello this Is an Example With cased letters" #第一种方法:这段长代码很难受
'''
a = my_str.upper()
print(a)
b = a.split(' ')
print(b)
b.sort()
print(b)
#your solution here
''' #第二种方法:结合key关键字一条就出来了
sorted(my_str.split(),key=str.lower) #输出结果
['an', 'cased', 'Example', 'Hello', 'Is', 'letters', 'this', 'With'] #第三种,无视大小写排序
# breakdown the string into a list of words
words = my_str.split() # sort the list
words.sort() # display the sorted words print("The sorted words are:")
for word in words:
print(word, end=' ') #输出结果
The sorted words are:
Example Hello Is With an cased letters this
用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)],然后分别按名字和成绩排序
思路:定义两个函数用用t[0]和t[1]分别表示名字和成绩,然后用sort或sorted排序
#按名字字母排序
>>> L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
>>> def by_name(t):
return t[0] #t[0]表示名字 >>> L2 = sorted(L,key = by_name)
>>> print(L2)
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)] #按成绩低到高排序
>>> def by_score(t):
return t[1] #t[1]表示成绩 >>> L2 = sorted(L,key = by_score)
>>> print(L2)
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
Python排列函数:sort、sorted的更多相关文章
- python排序函数sort()与sorted()区别
sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key ...
- python之排序(sort/sorted)
大家都知道,python排序有内置的排序函数 sort() 和 高阶函数sorted() .但是它们有什么区别呢? 让我们先从这个函数的定义说起: sorted():该函数第一个参数iterable为 ...
- python几个排序函数 sort sorted argsort
Python中排序常用到的sort .sorted和argsort函数 [摘要:Python中sort 战 sorted函数 一 .先容 sort函数是list列表中的函数,而 sorted能够对li ...
- 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析
一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...
- Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?
在<第8.23节 Python中使用sort/sorted排序与"富比较"方法的关系分析>中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用 ...
- python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数
Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序. 1. 用list.sort /sorted 对list of tuples中第二个值进行 ...
- python中的sort、sorted、reverse、reversed详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- Python_Tips[3] -> sort/sorted 排序函数
排序函数 / Sort Function list自带的sort函数可以实现对列表的排列功能,具有同样功能的还有sorted函数. 基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址 ...
- Python: sort,sorted,OrderedDict的用法
Python: sort,sorted,OrderedDict的用法 from http://stqdd.com/archives/427 by 莫亚菜 python对容器内数据的排序有两种,一种是容 ...
随机推荐
- NetBpm 目录
整理了一下网上的一些netbpm,虽然这项目现在不再更新了,还是想去学习一下,这个组件用时候很方便,比workFlow方便的多了 如果像jbpm那样一直更新就好了. 前两篇是个人的一个总结,后面一些是 ...
- [AX]AX2012 R2 出差申请和支出报告
AX2012中有个模块叫做出差和支出,用于管理出差以及相关的费用,用户只能在员工自助服务EP站点上提交出差申请.费用报销报告,在Client程序中做审核以及后续的支付动作等,最后形成相关的财务分录. ...
- Android开发-- 简单对话框
final Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.appicns_folder_sma ...
- vmware下虚拟机不能上网问题解决
这个问题困扰了好久,vmware下装的虚拟机可以通过DHCP获取单独IP,但当用到管控较严格的环境,需要它与主机共享IP时,就不好使了. 今天在一篇文章中找到答案,如下图,windows系统中要启动V ...
- linux共享内存的查看与删除
在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误.您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法. 预备知识 L ...
- 新唐ISP操作步骤(转)
1,电脑上装上“NuMicro_ICP_Programming_Tool_v1.18.5320.zip”:2,把目标板通过SWD口的NU-LINK连接到电脑的USB口上:3,打开桌面的“NuMicro ...
- HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP错误解决方法
在树莓派上运行在windows上正确的程序, 报错: HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV Error: Assertion failed (s ...
- Git学习(二)(2015年11月18日)(2016年1月29日)
2015年11月18日Git学习: .Shell 删除文件夹及其所有文件 rd/s/q 文件目录 ---------------当前为先创建本地Git库后与网上Git服务器关联------------ ...
- sea.js常用接口
seajs.config 用来对 Sea.js 进行配置. seajs.config({ // 指定需要使用的插件 plugins: ['text', 'shim'], // 设置别名,方便调用 al ...
- Shell xargs
from here 简介之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: 这个命令是错误的find /sbin -perm + ...