[Python] sort()方法 VS sorted()函数

本文详细介绍了Python中sort和sorted函数的区别和用法。sort()是列表内置方法,直接在原列表上进行排序,不返回新列表;而sorted()函数则返回一个新的排序列表,不对原数据进行修改。两者都可以通过reverse参数设置升序或降序,以及通过key参数实现自定义排序。示例展示了如何对数字、字符串、元组列表以及字典列表进行排序,包括自定义排序规则和忽略大小写的排序。
摘要由CSDN通过智能技术生成

sort与sorted区别:

  1. sort是应用在list列表上的方法,sorted可以对所有可迭代的对象进行排序操作
  2. list.sort()不会返回对象,会改变原有的list,即直接在原来的list基础上修改,而sorted()函数会返回一个新列表,不是在原来的基础上进行操作

sort()函数

用于对原列表进行就地排序,列表中的元素可以是数字或者字符串

语法

list.sort(reverse=True|False, key=myFunc)

参数

reverse:排序规则,reverse = True 降序, reverse = False升序(默认)

key: 指定排序标准的函数,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序(实现自定义的排序)

返回值

该方法没有返回值,但是会对列表的对象进行排序

实例

# 列表
vowels = ['e', 'a', 'u', 'o', 'i']

# 升序
vowels.sort()
# 升序输出: ['a', 'e', 'i', 'o', 'u']
print('升序输出:', vowels)

# 降序
vowels.sort(reverse=True)
# 输出结果:['u', 'o', 'i', 'e', 'a']
print ('降序输出:', vowels)

# 自定义排序(使用key参数)
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
 
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)

# 排序列表: [(4, 1), (2, 2), (1, 3), (3, 4)]
print ('排序列表:', random)

扩展 

x = [4,6,2,1,7,9]
y = x.sort() # Don't do this!
print(y) # None

# 正确方式:先将y关联到x的副本,再对y进行排序
x = [4,6,2,1,7,9]
y = x.copy()
y.sort()
print(x) # [4, 6, 2, 1, 7, 9]
print(y) # [1, 2, 4, 6, 7, 9]

x = [4,6,2,1,7,9]
y = sorted(x)
print(x) # [4, 6, 2, 1, 7, 9]
print(y) # [1, 2, 4, 6, 7, 9]

# 实际上,sorted函数可用于任何序列,但总是返回一个列表
z = sorted('Python')
print(z) # ['P', 'h', 'n', 'o', 't', 'y']

sorted()函数

对所有可迭代的对象进行排序操作

语法

sorted(iterable, reverse=True|False, key=myFunc) 

参数

iterable:可迭代对象

reverse:排序规则,reverse = True 降序,reverse = False升序(默认)

key:指定排序标准的函数,key接受的函数返回值,表示此元素的权值,将按照权值大小进行排序(实现自定义的排序)

返回值

返回重新排序的列表

实例

# 默认为升序
list1 = sorted([5, 2, 3, 1, 4])
print(list1) # [1, 2, 3, 4, 5]

# sorted()函数可以接收任何的iterable
list2 = sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
print(list2) # [1, 2, 3, 4, 5]

# 利用key进行倒序排序
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
result_list = sorted(example_list, key=lambda x: x*-1)
print(result_list) # [7, 6, 5, 4, 3, 2, 1, 0]

# 默认情况下,对字符串排序,是按照ASCII的大小比较的
list3 = sorted(['bob', 'about', 'Zoo', 'Credit'])
print(list3) # ['Credit', 'Zoo', 'about', 'bob']
# 排序忽略字母大小写
list4 = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
print(list4) # ['about', 'bob', 'Credit', 'Zoo']

# 降序排序 reverse=True
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
list5 = sorted(example_list, reverse=True)
print(list5) # [7, 6, 5, 4, 3, 2, 1, 0]

# 扩展
# 可以通过key的值来进行数组/字典的排序
array = [{"age":20,"name":"a"},
         {"age":25,"name":"b"},
         {"age":10,"name":"c"}]
array = sorted(array,key=lambda x:x["age"])
print(array)
# 输出结果:
# [{'age': 10, 'name': 'c'}, 
# {'age': 20, 'name': 'a'}, 
# {'age': 25, 'name': 'b'}]

# 先按照成绩降序排序,相同成绩的按照名字升序排序:
d1 = [{'name':'alice', 'score':38}, 
      {'name':'bob', 'score':18}, 
      {'name':'darl', 'score':28}, 
      {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)

# 输出结果:
#[{'name': 'alice', 'score': 38}, 
# {'name': 'christ', 'score': 28}, 
# {'name': 'darl', 'score': 28}, 
# {'name': 'bob', 'score': 18}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值