python笔记18-sort和sorted区别
前言
python的排序有两个方法,一个是list对象的sort方法,另外一个是builtin函数里面sorted,主要区别:
- sort仅针对于list对象排序,无返回值, 会改变原来队列顺序
- sorted是一个单独函数,可以对可迭代(iteration)对象排序,不局限于list,它不改变原生数据,重新生成一个新的队列
本篇是基于python3.6讲解的,python2会多一个cmp参数,cmp函数在python3上已经丢弃了
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
sort方法
1.sort是list对象的方法,通过.sort()来调用
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
>>>
2.参数说明:
key 用列表元素的某个属性或函数进行作为关键字(此函数只能有一个参数)
reverse 排序规则. reverse = True 降序 或者 reverse = False 升序,默认升序
return 无返回值
3.使用方法介绍
# coding:utf-8
a = [-9, 2, 3, -4, 5, 6, 6, 1]
# 按从小到大排序
a.sort()
print(a) # 结果:[-9, -4, 1, 2, 3, 5, 6, 6]
# 按从大到小排序
a.sort(reverse=True)
print(a) # 结果:[6, 6, 5, 3, 2, 1, -4, -9]
4.key参数接受的是函数对象,并且函数只能有一个参数,可以自己定义一个函数,也可以写个匿名函数(lambda)
# coding:utf-8
a = [-9, 2, 3, -4, 5, 6, 6, 1]
# 按绝对值排序
def f(x):
return abs(x)
a.sort(key=f)
print(a) # 结果:[1, 2, 3, -4, 5, 6, 6, -9]
# 1、list对象是字符串
b = ["hello", "helloworld", "he", "hao", "good"]
# 按list里面单词长度倒叙
b.sort(key=lambda x: len(x), reverse=True)
print(b) # 结果:['helloworld', 'hello', 'good', 'hao', 'he']
# 2、.list对象是元组
c = [("a", 9), ("b", 2), ("d", 5)]
# 按元组里面第二个数排序
c.sort(key=lambda x: x[1])
print(c) # 结果:[('b', 2), ('d', 5), ('a', 9)]
# 3、list对象是字典
d = [{"a": 9}, {"b": 2}, {"d":5}]
d.sort(key=lambda x: list(x.values())[0])
print(d) # 结果:[{'b': 2}, {'d': 5}, {'a': 9}]
sorted函数
1.sorted是python里面的一个内建函数,直接调用就行了
>>> help(sorted)
Help on built-in function sorted in module builtins:
sorted(iterable, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
>>>
2.参数说明
iterable 可迭代对象,如:str、list、tuple、dict都是可迭代对象(这里就不局限于list了)
key 用列表元素的某个属性或函数进行作为关键字(此函数只能有一个参数)
reverse 排序规则. reverse = True 降序或者 reverse = False 升序,默认升序
return 有返回值值,返回新的队列
3.使用方法介绍
# coding:utf-8
a = [-9, 2, 3, -4, 5, 6, 6, 1]
# 按从小到大排序
b = sorted(a)
print(a) # a不会变
print(b) # b是新的队列 [-9, -4, 1, 2, 3, 5, 6, 6]
# 按从大到小排序
c = sorted(a, reverse=True)
print(c) # 结果:[6, 6, 5, 3, 2, 1, -4, -9]
4.可迭代对象iterable都可以排序,返回结果会重新生成一个list
# coding:utf-8
# 字符串也可以排序
s = "hello world!"
d = sorted(s)
print(d) # 结果:[' ', '!', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
# 元组也可以排序
t = (-9, 2, 7, 3, 5)
n = sorted(t)
print(n) # 结果:[-9, 2, 3, 5, 7]
# dict按value排序
f = {"a": 9, "b": 2, "d": 5}
g = sorted(f.items(), key=lambda x: x[1])
print(g) # 结果:[('b', 2), ('d', 5), ('a', 9)]
python自动化交流 QQ群:779429633
python笔记18-sort和sorted区别的更多相关文章
- python排序函数sort()与sorted()区别
sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key ...
- sort 与 sorted 区别
sort 与 sorted 区别: sort 只是应用在 list 上的方法,(就地排序无返回值). sorted 是内建函数,可对所有可迭代的对象进行排序操作,(返回新的list). 语法 sort ...
- sort 与 sorted 区别:
sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值, ...
- python中list.sort()与sorted()的区别
list.sort()和sorted()都是python的内置函数,他们都用来对序列进行排序,区别在于 list.sort()是对列表就地(in-place)排序,返回None:sorted()返回排 ...
- Python中的 sort 和 sorted
今天在做一道题时,因为忘了Python中sort和sorted的用法与区别导致程序一直报错,找了好久才知道是使用方法错误的问题!现在就大致的归纳一下sort和sorted的用法与区别 1. sort: ...
- python中的sort、sorted、reverse、reversed详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- python中sort与sorted区别
1.sort()函数 (只对list有用) sort(...) L.sort(key = None,reverse=False) key = 函数 这个函数会从每个元素中提取一个用于比较的关键字.默认 ...
- python sort和sorted区别。
前者是方法,后者是函数.oop和opp区别的经典体现.好好领会,就能知道什么时候写类什么时候写函数好.
- python中的sort和sorted
共同点 都有三个参数, cmp用户自定义(指定函数),每个元素都会调用,效率没key高 key带一个参数的函数,用来为每个元素提取比较值 reverse=True 翻转 sort sort作用的 ...
- python list列表sort、sorted、reverse排序
列表排序:sort是修改原列表,sorted提供原列表的一个有序副本 li=[2,1,4,5,0]li.sort() #默认从小到大print li结果:[0, 1, 2, 4, 5] li=[2,1 ...
随机推荐
- Codeforces 821C Okabe and Boxes(模拟)
题目大意:给你编号为1-n的箱子,放的顺序不定,有n条add指令将箱子放入栈中,有n条remove指令将箱子移除栈,移出去的顺序是从1-n的,至少需要对箱子重新排序几次. 解题思路:可以通过把栈清空表 ...
- Django之Cookie、Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- Effective C++学习进阶版
记得前段时间又一次拿起<Effective C++>的时候,有种豁然开朗的感觉,所以翻出了我第一遍读时做的笔记.只做参考以及查阅之用.如有需要请参阅<Effective C++> ...
- html5多媒体Video/Audio
video: 1.常见的视频格式 视频的组成部分:画面.音频.编码格式 视频编码:H.264.theora.VP8(google开源) 2.常见的音频格式 编码:AAC.MP3 ...
- postgresql 数据导入导出
[转] 分类: postgresql2013-06-09 10:21 2486人阅读 评论(0) 收藏 举报 一.导出数据库及具体表 1.导出数据库:方式一:pg_dump -U postgres ...
- C++函数的重载、覆盖和隐藏区别
a.成员函数被重载的特征:(1)相同的范围(在同一个类中)(2)函数名字相同(3)参数不同(4)virtual 关键字可有可无b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生 ...
- ubuntu下 pycharm使用andcoda下的tensorflow
在ubuntu中 tensorflow是安装在andconda里的一个虚拟环境中,他就相当于一个容器,将tensorflow的整个环境去模拟隔离出来,因为我们直接使用andconda库去作为pycha ...
- Java变量和运算符
1.变量 变量概述 什么是变量?变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:你家里的大衣柜是容器,用来装载衣裤:饭盒是容器,用来装载饭菜.那么变量是 ...
- 【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)
3560: DZY Loves Math V Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 241 Solved: 133 Description ...
- 51Nod1962 区间计数
这题与之前那道区间最值的题非常类似,依旧是二分区间,然后统计跨过中间点的区间贡献. 我们要选出小于等于和小于的,这样就可以算出相等的区间长了. 复杂度O(nlogn) By:大奕哥 #include& ...