排序函数介绍: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的更多相关文章

  1. python排序函数sort()与sorted()区别

    sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key ...

  2. python之排序(sort/sorted)

    大家都知道,python排序有内置的排序函数 sort() 和 高阶函数sorted() .但是它们有什么区别呢? 让我们先从这个函数的定义说起: sorted():该函数第一个参数iterable为 ...

  3. python几个排序函数 sort sorted argsort

    Python中排序常用到的sort .sorted和argsort函数 [摘要:Python中sort 战 sorted函数 一 .先容 sort函数是list列表中的函数,而 sorted能够对li ...

  4. 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析

    一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...

  5. Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?

    在<第8.23节 Python中使用sort/sorted排序与"富比较"方法的关系分析>中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用 ...

  6. python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数

    Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序. 1. 用list.sort /sorted 对list of tuples中第二个值进行 ...

  7. python中的sort、sorted、reverse、reversed详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  8. Python_Tips[3] -> sort/sorted 排序函数

    排序函数 / Sort Function list自带的sort函数可以实现对列表的排列功能,具有同样功能的还有sorted函数. 基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址 ...

  9. Python: sort,sorted,OrderedDict的用法

    Python: sort,sorted,OrderedDict的用法 from http://stqdd.com/archives/427 by 莫亚菜 python对容器内数据的排序有两种,一种是容 ...

随机推荐

  1. virtio-netdev 数据包的发送

    在前面几文中已经大体介绍了virtio的重要组成,包含virtio net设备的创建,vring的创建,与virtio设备的交互方式,我们就从网络数据包的发送角度来看下virtio的详细使用流程. [ ...

  2. Dubbo -- 系统学习 笔记 -- 依赖

    Dubbo -- 系统学习 笔记 -- 目录 依赖 必需依赖 缺省依赖 可选依赖 依赖 必需依赖 JDK1.5+ 理论上Dubbo可以只依赖JDK,不依赖于任何三方库运行,只需配置使用JDK相关实现策 ...

  3. Docker background

    什么是 Docker? Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨论 ...

  4. Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL

    Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...

  5. phpadmin试用

    在Windows或者Linux下mysql安装后默认的密码为空,又当我们又安装了mysql的管理工具phpmyadmin后登陆时 出现“空密码登陆呗禁止(参见允许密码为空)”.不能登录成功       ...

  6. 使用 urllib 处理 HTTP 异常

    (1) 我们发起 HTTP 请求,有时会发生异常,如请求超时,登录密码错误,请求链接不存在等等,使用 urllib.request.URLError 可以捕获这些与 URL 相关的异常(2) urll ...

  7. weblogic12C出现“java.lang.ArrayIndexOutOfBoundsException: 48188”

    最近将10G的一个项目转移到12C出现数组越界的问题: 解决办法:  jaxen-1.1.1.jarxom-1.0.jaricu4j-2.6.1.jar  把项目中这三个jar包删除后就可以正常部署了 ...

  8. Apache Kafka 1.0.0正式发布!

    千呼万唤始出来,经过7年的发展与完善,Apache Kafka 1.0.0正式发布!在笔者看来,比起1.0.0引入的新功能,此版本最大的意义在于标识Kafka各种组件功能的稳定性.不过我们还是来看下1 ...

  9. codeforces水题100道 第七题 Codeforces Round #270 A. Design Tutorial: Learn from Math (math)

    题目链接:http://www.codeforces.com/problemset/problem/472/A题意:给你一个数n,将n表示为两个合数(即非素数)的和.C++代码: #include & ...

  10. iOS - App Extension 整体总结

    一.App Extension的介绍 App Extension可以让你扩展你APP的自定义功能和内容,使用户可以在与其他应用或者系统进行互动的时候去使用它.app extension即为本文所说的e ...