欢迎访问宙启技术站
智能推送

Python中sorted函数用法和例子

发布时间:2023-06-01 08:44:56

Python中有很多内置函数,其中sorted()函数就是一个非常有用的函数。sorted()函数可以对列表、元组、字典、集合、字符串等各种数据类型进行排序操作。在本文中,我们将深入了解sorted()函数的各个方面及其用法,并提供一些有用的例子。

## sorted()函数基础用法

sorted()函数的基本语法如下:

sorted(iterable, *, key=None, reverse=False)

其中,iterable参数是需要排序的可迭代对象,key是用来指定排序规则的函数,reverse是一个布尔值,用来指定是否对排序结果进行反转。

在最基本的用法中,我们可以直接对一个列表进行排序,这样:

>>> a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> sorted(a)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例子中,我们定义了一个列表a,然后使用sorted()函数对其进行排序。因为sorted()函数默认按照升序排序,所以最终排序结果为从小到大的值。

下面我们分别来看一下sorted()函数中的key和reverse参数具体用法。

## key参数

在实际开发中,有时需要自定义排序规则,因此我们可以使用key参数来指定排序规则。

比如,我们想要对一个字符串列表进行排序,按照每个字符串长度的大小来进行排序,代码如下:

>>> a = ['apple', 'cat', 'cabin', 'dog', 'fruit', 'door']
>>> sorted(a, key=lambda x: len(x))
['cat', 'dog', 'door', 'apple', 'cabin', 'fruit']

在这个例子中,我们用lambda表达式来定义了一个匿名函数,函数的变量x代表列表中的每个元素,lambda表达式的返回值为每个元素的长度,即按照字符串长度进行排序。

我们还可以使用自定义的函数,来指定排序规则。比如,我们自定义一个函数来对一个整型列表进行排序,代码如下:

>>> a = [2, 5, 1, 9, 7, 4, 3, 8, 6]
>>> def func(x):
...     if x % 2 == 0:
...         return -x
...     else:
...         return x
... 
>>> sorted(a, key=func)
[1, 3, 5, 7, 9, -2, -4, -6, -8]

在这个例子中,我们定义了一个名为func的函数,函数的变量x代表列表中的每个元素,函数的返回值根据x的奇偶性分别为x或-x,即偶数取负数,奇数不变。然后,我们使用sorted()函数对列表a进行排序,key参数指定排序规则为自定义函数func。

## reverse参数

在实际开发中,有时需要将排序结果进行反转,即按照降序排列。这时,我们可以使用reverse参数来指定是否将排序结果进行反转。

比如,我们想要对一个整型列表进行降序排列,代码如下:

>>> a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> sorted(a, reverse=True)
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

在这个例子中,我们使用sorted()函数对列表a进行排序,reverse=True参数指定将排序结果进行反转,即从大到小排序。

sorted()函数对元组、字典、集合、字符串等进行排序操作的方式,与对列表进行操作的方法类似。下面我们来分别看一下各种数据类型的排序操作。

## 元组排序

元组与列表类似,都是一种序列类型的数据结构,我们可以使用sorted()函数对元组进行排序操作。

比如,我们使用sorted()函数对一个元组进行排序操作,代码如下:

>>> a = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
>>> sorted(a)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

在这个例子中,我们定义了一个元组a,然后使用sorted()函数对其进行排序。

## 字典排序

在对字典进行排序时,需要注意到sorted()函数只对字典中键值进行排序。

比如,我们定义一个字典,按照键进行排序操作,代码如下:

>>> a = {'apple': 5, 'banana': 3, 'orange': 2, 'pear': 4}
>>> sorted(a)
['apple', 'banana', 'orange', 'pear']

在这个例子中,我们定义了一个字典a,然后使用sorted()函数对其进行排序,sorted()函数只对字典a中的键进行排序,返回一个按照字典键排序后的新列表。

如果我们想要按照字典值进行排序操作,需要使用额外的函数,比如itemgetter()函数来进行操作。代码如下:

>>> from operator import itemgetter
>>> a = {'apple': 5, 'banana': 3, 'orange': 2, 'pear': 4}
>>> sorted(a.items(), key=itemgetter(1))
[('orange', 2), ('banana', 3), ('pear', 4), ('apple', 5)]

在这个例子中,我们使用sorted()函数对字典a的items()方法返回的键值对进行排序,key参数使用itemgetter(1)来指定按照字典值进行排序操作。

## 集合排序

在对集合进行排序时,我们需要将集合先转化为列表,然后再使用sorted()函数对列表进行排序操作。

比如,我们定义一个集合,按照值进行排序操作,代码如下:

>>> a = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
>>> sorted(list(a))
[1, 2, 3, 4, 5, 6, 9]

在这个例子中,我们定义了一个集合a,然后先将集合a转化为列表,再使用sorted()函数对列表进行排序,这样可以得到按照从小到大排序的新列表。

## 字符串排序

在对字符串进行排序时,sorted()函数默认按照字母表顺序进行排序。比如,我们定义一个字符串,对其进行排序操作:

>>> a = 'hello, world!'
>>> ''.join(sorted(a))
' !,dehllloorw'

在这个例子中,我们定义一个字符串a,然后使用sorted()函数对其进行排序,返回按照从小到大排序的新字符串。

## sorted()函数实际应用

在实际开发中,sorted()函数被广泛应用,以下是一些实际应用的例子。

### 对文件进行排序

有时我们需要对文件中的内容进行排序,比如我们有一个文件file.txt,文件内容为:

foo
1
bar
3
baz
2

现在我们希望按照行内的数字大小进行排序,代码如下:

with open('file.txt', 'r') as f:
    rows = f.readlines()
    rows_sorted = sorted(rows, key=lambda x: int(x.strip()) if x.strip().isdigit() else x.strip())
    with open('file_sorted.txt', 'w') as f_sorted:
        f_sorted.writelines(rows_sorted)

在这个例子中,我们首先使用with open()语句打开文件file.txt,并使用readlines()方法读取文件内容。