目录
sorted排序函数
sorted排序函数调整每一个元素的次序
sorted 语法:
sorted(iterable, key=None, reverse=False)
返回重新排序的列表,原始列表的顺序不变。
说明:
-
iterable -- 可迭代对象。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
alist=[1,3,5,4,2] # 原始列表,乱序
s_list1=sorted(alist) # 排序
s_list2=sorted(alist,reverse=True) # 排序,逆序
print(alist) # [1, 3, 5, 4, 2]
print(s_list1) # [1, 2, 3, 4, 5]
print(s_list2) # [5, 4, 3, 2, 1]
sorted与list.sort排序的区别
sort()方法语法:
list.sort( key=None, reverse=False)
没有返回值,原列表对象变为排序后的结果。
说明:
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
alist=[1,3,5,4,2] # 原始列表,乱序
print(alist) # [1, 3, 5, 4, 2]
s_list1=alist.sort() # 列表自身排序,无返回
print(s_list1) # None
# 排序后,原列表变为有序
print(alist) # [1, 2, 3, 4, 5]
alist.sort(reverse=True) # 对当前alist对象排序,逆序
print(alist) # [5, 4, 3, 2, 1]
sorted与list.sort排序功能相似,但是有两个主要区别:
- 返回值不同,sorted返回新的排序对象,而list.sort没有返回对象,是对原对象本身的操作。
- sorted可对任意迭代对象排序,而list.sort只能对list对象操作。
sorted对非list序列的排序,返回的是列表(而不是原数据类型)
aset = {3,1,5,4,2} # set元素无法保证原序,有自己的默认排序
print(aset) # {1, 2, 3, 4, 5}
s_aset=sorted(aset,reverse=True) # 排序,逆序
print(s_aset) # [5, 4, 3, 2, 1]
adict={2: 'B',1: 'D', 3: 'B'} # 原字典对象
s_adict=sorted(adict,reverse=True) # 排序,逆序,默认对key排序
print(adict) # {2: 'B', 1: 'D', 3: 'B'}
print(s_adict) # [3, 2, 1]
sorted排序与lamda表达式的结合
sorted的key参数可以指定排序辅助函数。
# 原始序列
alist=[5,-2,1,3,4]
print(alist) # [5, -2, 1, 3, 4]
# 默认排序处理
alist1=sorted(alist)
print(alist1) # [-2, 1, 3, 4, 5]
# sorted用key排序时,会根据函数结果来对原数列排序,
# 函数只辅助排序,不改变序列内的值
# abs()是Python内置函数,求绝对值
alist2=sorted(alist,key=abs)
print(alist2) # [1, -2, 3, 4, 5]
# sorted与lambda表达式的结合
alist3=sorted(alist,key=lambda x:x**2)
print(alist3) # [1, -2, 3, 4, 5]
# 自定义函数,处理每个元素
def myfun(item):
return item*(-1)
# sorted与自定义函数的结合
alist4=sorted(alist,key=myfun)
print(alist4) # [5, 4, 3, 1, -2]
list嵌套体的排序(推荐用sorted与lamda表达式的结合方法)
# 原始序列
alist=[
[3,6,1],
[5,4,3],
[1,7,2]
]
print(alist) # [[3, 6, 1], [5, 4, 3], [1, 7, 2]]
# 按第一列排序,lambda函数返回第一列
print(sorted(alist,key=lambda x:x[0])) # [[1, 7, 2], [3, 6, 1], [5, 4, 3]]
# 自定义函数
def myfun(item):
return item[1] # 返回第二列
# 按第二列排序
print(sorted(alist,key=myfun)) # [[5, 4, 3], [3, 6, 1], [1, 7, 2]]
字典排序(推荐用sorted与lamda表达式的结合方法)
字典排序时可以先把字典转为列表复合体,然后再对列表排序。
字典的列表形式可以用dict.items()方法转换(可迭代对象)。
adict={2: 'b',1: 'd', 3: 'c'} # 原字典对象
print(adict) # {2: 'b', 1: 'd', 3: 'c'}
print(adict.items()) # dict_items([(2, 'b'), (1, 'd'), (3, 'c')])
print(list(adict.items())) # [(2, 'b'), (1, 'd'), (3, 'c')]
# 按字典的key排序
print(sorted(adict.items(),key=lambda x:x[0])) # [(1, 'd'), (2, 'b'), (3, 'c')]
# 按字典的value排序
print(sorted(adict.items(),key=lambda x:x[1])) # [(2, 'b'), (3, 'c'), (1, 'd')]
数列去重排序
sorted与set和list结合,实现去重排序。
alist=[2,2,2,1,3,5,4,4,4]
# 原数据
print(alist) # [2, 2, 2, 1, 3, 5, 4, 4, 4]
# 去重,排序,逆序
print(sorted(set(alist),reverse=True)) # [5, 4, 3, 2, 1]