Python基础教程

012_sorted排序函数

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排序功能相似,但是有两个主要区别:

  1. 返回值不同,sorted返回新的排序对象,而list.sort没有返回对象,是对原对象本身的操作。
  2. 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]
这篇文章对您有用吗?

我们要如何帮助您?