python中的排序问题总结

目录

一、list.reverse()

二、 通过切片的方式达到反向排列的效果

三、容器通用排序功能 sorted(容器,reverse=bool)

四、用sort()函数自定义排序原则


一、list.reverse()

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

三、容器通用排序功能 sorted(容器,reverse=True|False)

这个排序是根据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))  # 输出结果:<class 'list'>
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)) # 输出结果:<class 'list'>

特别地,对字典的使用进行讨论:

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()函数

四、用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]] <class 'list'>
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]] <class 'list'>

 

注:

1. key是要求传入一个函数,在执行过程中,列表中的每一个元素都会传入到函数中,并且按照函数(比如sort_key_1的返回值element[0])返回,然后返回的数就作为排序的依据(根据reverse的布尔值决定是按ASCII码值升序排还是降序排)

2. element只是一个形参,并不是指示元素的意思,将其改为k也是可以得到同样的结果的

3. 和调用sorted()函数不同,调用sort()函数会改变 原序列的排列顺序

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值