Python中如何使用sorted函数对列表或元组进行排序
在Python中,当我们需要对一个列表或元组进行排序时,可以使用sorted函数。这个函数可以帮助我们将序列中的元素按照一定的规则排序,而且还返回一个新的排序后的列表(或元组),原序列不会被改变。
sorted函数的基本语法如下:
sorted(iterable[, key][, reverse])
其中,iterable表示要进行排序的列表、元组或其他可迭代对象;key和reverse是可选的参数。
key参数用来指定一个关键字函数,它接收一个参数并返回一个值,表示用来比较元素大小的参考值。默认情况下,sorted函数会按照升序排列元素(从小到大),但是如果我们需要按照其他规则排序,可以使用key参数指定一个关键字函数。
reverse参数用来指定排序规则,如果reverse=True,则表示降序排列(从大到小),否则默认为升序排列。
下面我们举几个例子来说明如何使用sorted函数对列表或元组进行排序。
例1:按照升序排列
我们先来看一个简单的例子,假设我们有一个列表a,里面有8个数字,我们要将它按照升序排列。
a = [3, 7, 1, 9, 2, 5, 8, 4] b = sorted(a) print(b)
输出结果为:[1, 2, 3, 4, 5, 7, 8, 9]
可以看到,我们使用sorted函数将列表a排序后得到了一个新的列表b,它按照升序排列了。
例2:按照降序排列
如果我们希望将元素按照降序排列,只需要将reverse参数设为True即可。
a = [3, 7, 1, 9, 2, 5, 8, 4] b = sorted(a, reverse=True) print(b)
输出结果为:[9, 8, 7, 5, 4, 3, 2, 1]
可以看到,我们得到了按照降序排列的新列表b。
例3:按照元素长度排序
我们也可以通过设置key参数来指定一个关键字函数,来实现按照其他规则进行排序。比如,我们有一个字符串元素的列表a,我们希望按照每个元素的长度进行排序。这时候我们可以写一个函数,返回每个元素的长度作为参考值,然后将这个函数作为key参数传递给sorted函数。
a = ['apple', 'banana', 'orange', 'watermelon', 'grape'] b = sorted(a, key=lambda x: len(x)) print(b)
输出结果为:['grape', 'apple', 'banana', 'orange', 'watermelon']
可以看到,我们定义了一个lambda函数,它接收一个参数x表示列表中的每个元素,然后返回该元素的长度作为参考值。这样,sorted函数就会按照元素长度进行排序了。
如果我们想要按照元素长度进行降序排列,也很容易实现,只需要再加上reverse=True参数即可。
a = ['apple', 'banana', 'orange', 'watermelon', 'grape'] b = sorted(a, key=lambda x: len(x), reverse=True) print(b)
输出结果为:['watermelon', 'banana', 'orange', 'apple', 'grape']
例4:按照多个属性排序
有时候我们希望按照多个属性进行排序,比如我们有一个元组列表a,每个元组包含两个元素,分别是一个字符串和一个整数。我们希望先按照字符串元素进行升序排列,如果字符串相同则按照整数元素进行降序排列。这时候我们可以写一个lambda函数作为key参数,先按照字符串元素进行排序,如果字符串相同再按照整数元素进行排序。
a = [('apple', 3), ('banana', 4), ('orange', 2), ('pear', 3), ('apple', 2)]
b = sorted(a, key=lambda x: (x[0], -x[1]))
print(b)
输出结果为:[('apple', 3), ('apple', 2), ('banana', 4), ('orange', 2), ('pear', 3)]
可以看到,我们传递了一个lambda函数作为key参数,它先按照元组的 个元素进行排序,如果相同则再按照第二个元素进行降序排序。
总结
sorted函数是Python中非常常用的一个函数,它可以帮助我们对列表、元组等可迭代对象进行排序。使用sorted函数时,我们可以同时指定升序或降序排列,也可以通过设置key参数来指定一个关键字函数,实现按照其他规则进行排序。掌握sorted函数对我们进行编程开发非常有帮助,希望这篇文章可以对大家有所帮助。
