python中sort()和sorted()

在py中,排序经常用到的两个函数,一个是sort(), 一个是sorted(). 两者的使用是有一些差别的。

1. sort()排序只对列表排序,且会改变原列表的元素顺序,因为不会创建新的列表,所以效率较高。

2. sorted()是在sort()基础上又延申的排序函数,对可迭代对象都可以排序,即对列表、字符串、元组、字典等均可排序。但它不会改变原列表,它会创建新的列表,用来保存排序后的列表。所以,使用它比较稳妥,不会改变原数据。

sorted()函数对所有可迭代对象的排序返回的都是列表,如果想返回其他类型,可使用相应的函数去转换。

用法:

1. sort(key, reverse)参数key是规定排序规则,reverse参数默认是False升序,如果是True则为降序

1. 按照字符串长度进行排序
list1 = ['apple', 'banana', 'pitaya', 'pear', 'kiwi']
list1.sort(key=len)
print(list1)

输出结果是:
['pear', 'kiwi', 'apple', 'banana', 'pitaya']

对于元素全是字符串的列表,可以使用长度对列表进行排序,但如果遇到int这样没有len()函数的元素,就会报错TypeError: object of type ‘int’ has no len()。

2. 按照字符串的第二个字符进行排序
list1 = ['happy','sad', 'morose', 'excited', 'alert']
list1.sort(key=lambda x:x[1],reverse=True)
print(list1)

输出结果是:
['excited', 'morose', 'alert', 'happy', 'sad']

对于全是字符串的列表,可以对其元素第二个字符进行排序,但如果某个元素只有1个字符,却按照第2个字符排序,就会报错IndexError: string index out of range

3. 找到第n大的值
list1 = [4, 3, 9, 6, 1]
list1.sort(reverse=True)
print('max:', list1[0])
print('2nd max:', list1[1])

输出结果是:
max: 9
2nd max: 6

先降序,再按照索引取值,找到第一大和第二大的值。

4. 切片排序:将原列表切片 复制给新列表,再对新列表排序,同样可以实现排序且不改变原列表。
list1 = [1, 3, 2, 5]
print(id(list1))
list2 = list1[:]
print(id(list2))
list2.sort()
print(list2)
print(list1)

输出结果是:
2090106465984
2090106452096
[1, 2, 3, 5]
[1, 3, 2, 5]

使用切片法 复制给新列表创建的新列表和原列表是两个独立的列表,指向的内存地址都不同。如果直接用赋值法,那么两个列表将指向同一个内存地址,改变其中一个势必会改变另外一个。

5. sorted()对可迭代对象排序,包括对字符串、元组、字典。返回的都是列表,需要用其他函数来转换成其他类型。

str1 = '312'
print(sorted(str1))
print(reduce(lambda x,y:x+y, sorted(str1)))
print(''.join(sorted(str1)))

输出结果:
['1', '2', '3']
123
123
t = (3, 1, 5)
print(tuple(sorted(t)))

输出结果:
(1, 3, 5)



dict1 = {'name':'barren','age':28}
print(sorted(dict1))

输出结果:
['age', 'name']

对字典的排序是对键排序,不对值排序。

总结:sort()函数直接修改原列表,进行原地排序,这使其在处理大型数据集时具有显著的性能优势。sort()函数有两个重要参数:key和reverse. key参数允许我们指定一个函数,该函数将用于在比较元素时提取用于排序的键;而reverse参数则控制排序的顺序,设置为True时降序排序。

sorted()函数也用于排序,但它会返回一个新的已排序列表,而不修改原列表。这使得sorted()函数在需要保留原始列表顺序的场合下特别有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值