Python中sorted函数用法和例子
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()方法读取文件内容。
