目录
一、list.reverse()
二、 通过切片的方式达到反向排列的效果
三、容器通用排序功能 sorted(容器,reverse=bool)
四、用sort()函数自定义排序原则
list.reverse()将列表中的元素按下标从大到小排序(反向)
只有列表中有这种方法,其他的数据容器(字典、元组、集合)不能用
a_list=[1, 5, 7, 4, 3]
a_list.reverse()
print(a_list)
# 输出结果:[3, 4, 7, 5, 1]
注:
1. 因为 列表.reverse()函数没有返回值,所以不能写成 a=list.reverse(),然后print(a)
2. 列表是可以被改变的,所以经过reverse()操作之后,列表的顺序已经改变了(元组不可篡改)
序列(列表、元组、字符串)可以进行切片操作,将步长设置为-1,我们可以得到反向序列
a_str="15743"
result=a_str[::-1]
print(a_str)
print(result)
# print(a_str)输出结果: 15743
# print(result)输出结果:34751
这个排序是根据ASCII表的值的大小排序,不是按元素下标排序
列表、字符串、元组、集合、字典都适用
a_set={1, 5, 7, 4, 3}
result=sorted(a_set) # 对集合正向排序
print(a_set) #输出结果:{1, 3, 4, 5, 7}
print(result) # 输出结果:[1, 3, 4, 5, 7]
print(type(result)) # 输出结果:
tuple=(1,5,7,4,3)
result=sorted(tuple,reverse=True) # 对元组反向排序
print(tuple) # 输出结果:(1, 5, 7, 4, 3)
print(result) # 输出结果:[7, 5, 4, 3, 1]
print(type(result)) # 输出结果:
特别地,对字典的使用进行讨论:
a_dict={"a":1, "c":2, "b":3}
result1=sorted(a_dict,reverse=False)
result2=sorted(a_dict,reverse=True)
print(f"正向排序结果:{result1}") # 输出结果:['a', 'b', 'c']
print(f"反向排序结果:{result2}") # 输出结果:['c', 'b', 'a']
观察结果发现,sorted(dict)默认只对字典的key值按ASCII表值进行排序
注:
1. 根据结果显示,我们知道,sorted()不会改变原来的数据容器,而是返回一个新的排序好的数据容器
2. sorted()只能按照ASCII值从小到大排序(正向),或从大到小排序(反向),如果想按自定义的顺序排列,我们可以使用sort()函数
方式:
list.sort(key=作为排序规则的函数,reverse=True|False)
只能对list使用,但list中的元素可以是元组(改变的是元素的排序,并不是元组内的元素排序)
如果要对字符串、集合、元组操作,则要用list()先将其转化为list
a_list =[["a", 1], ("c", 2), ["b", 3]]
def sort_key_1(element):
return element[0]
a_list.sort(key=sort_key_1, reverse=True) # 按列表中元素的下标为0的元素按降序排列
print(alist, type(a_list)) # 输出结果:[('c', 2), ['b', 3], ['a', 1]]
a_list =[["a", 1], ("c", 2), ["b", 3]]
a_list.sort(key=lambda element:element[1],reverse=True) # 用匿名函数的方式写
print(a_list, type(a_list)) # 输出结果:[['b', 3], ('c', 2), ['a', 1]]
注:
1. key是要求传入一个函数,在执行过程中,列表中的每一个元素都会传入到函数中,并且按照函数(比如sort_key_1的返回值element[0])返回,然后返回的数就作为排序的依据(根据reverse的布尔值决定是按ASCII码值升序排还是降序排)
2. element只是一个形参,并不是指示元素的意思,将其改为k也是可以得到同样的结果的
3. 和调用sorted()函数不同,调用sort()函数会改变 原序列的排列顺序