Python排序傻傻分不清?一文看透sorted与sort用法

本文详细介绍了Python中排序工具sorted()和list的.sort()方法的用法,包括如何对数字和字符串进行排序,讨论了排序的局限性和陷阱,如不可比较的数据类型和大小写的敏感性。此外,还探讨了reverse参数和key参数的使用,以及何时选择使用sorted()和.sort()。最后,强调了两者在数据修改和不可逆性方面的区别,提醒开发者在处理重要数据时要谨慎选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序问题是所有程序员一定会遇到的问题,Python内置的排序工具sort()和sorted()功能强大,可以实现自定义的复杂式排序。平时我们使用两个函数可能没有仔细研究过它们的区别,随想随用了。但实际上二者还是有很大的去别的,在一些场景中不同互换使用。

本文将会介绍如何对不同数据结构中的各种类型的数据进行排序,自定义顺序,以及使用两种不同的Python排序方法。最后还会介绍如何区分sorted和sort,如何根据个性要求在代码中自定义复杂的排序顺序。

使用sorted()排序值

开始使用Python排序,首先要了解如何对数字数据和字符串数据进行排序。

1. 排序数字型数据

可以使用Python通过sorted()对列表进行排序。比如定义了一个整数列表,然后使用numbers变量作为参数调用sorted():

>>> numbers = [6, 9, 3, 1]
>>> sorted(numbers)
[1, 3, 6, 9]
>>> numbers
[6, 9, 3, 1]

输出是一个新的排序列表,如果打印原始变量时,原始数字变量numbers未改变,因为sorted()只提供已排序的输出,而不会更改原始值。这意味着sorted()可以在列表中使用,将输出立即分配给变量:

>>> numbers = [6, 9, 3, 1]
>>> numbers_sorted = sorted(numbers)
>>> numbers_sorted
[1, 3, 6, 9]
>>> numbers
[6, 9, 3, 1]

我们还可以通过调用sorted的help()来确认所有这些观察结果。可选参数key和reverse将在本教程后面介绍:

>>> # Python 3
>>> help(sorted)
Help on built-in function sorted in module builtins:

sorted(iterable, /, *, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customize the sort order, and the
    reverse flag can be set to request the result in descending order.

像操作列表一样,sorted()也可同样地用于元组和集合:

>>> numbers_tuple = (6, 9, 3, 1)
>>> numbers_set = {5, 5, 10, 1, 0}
>>> numbers_tuple_sorted = sorted(numbers_tuple)
>>> numbers_set_sorted = sorted(numbers_set)
>>> numbers_tuple_sorted
[1, 3, 6, 9]
>>> numbers_set_sorted
[0, 1, 5, 10]

注意到,即使输入一个集合和一个元组,输出也是一个列表,因为sorted()按定义返回一个新列表。如果需要匹配输入类型,则可以将返回的对象强制转换为新类型。如果尝试将结果列表强制转换回集合,结果将是无序的,因为集合是无序的,如下:

>>> numbers_tuple = (6, 9, 3, 1)
>>> numbers_set = {5, 5, 10, 1, 0}
>>> numbers_tuple_sorted = sorted(numbers_tuple)
>>> numbers_set_sorted = sorted(numbers_set)
>>> numbers_tuple_sorted
[1, 3, 6, 9]
>>> numbers_set_sorted
[0, 1, 5, 10]
>>> tuple(numbers_tuple_sorted)
(1, 3, 6, 9)
>>> set(numbers_set_sorted)
{0, 1, 10, 5}

2. 排序字符串型数据

字符串类型与其他可迭代对象类似,如列表和元组。下面的示例显示了sorted()如何将传递给它的字符串进行遍历,并在输出中对每个字符进行排序:

>>> string_number_value = '34521'
>>> string_value = 'I like to sort'
>>> sorted_string_number = sorted(string_number_value)
>>> sorted_string = sorted(string_value)
>>> sorted_string_number
['1', '2', '3', '4', '5']
>>> sorted_string
[' ', ' ', ' ', 'I', 'e', 'i', 'k', 'l', 'o', 'o', 'r', 's', 't', 't']

sorted()将字符串视为列表并遍历每个元素。在字符串中,每个元素表示字符串中的一个字符,sorted会以相同的方式处理一个字符串,对每个字符进行排序,包括空格。 .

我们通过使用split()可以改变输出是单个字符的结果,以空格为边界将原始字符串拆分成几个单词,再通过.join()将几个单词重新组合在一起成为新的字符串,具体如下:

>>> string_value = 'I like to sort'
>>> sorted_string = sorted(string_value.split())
>>> sorted_string
['I', 'like', 'sort', 'to']
>>> ' '.join(sorted_string)
'I li
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值