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

利用Python的sorted()函数对列表进行排序,如何指定排序的规则?

发布时间:2023-06-11 11:06:12

Python中的sorted()函数是内置的排序函数,可以用于对列表进行排序。sorted()函数顾名思义是对一个可迭代对象进行排序,返回一个排序后的新的列表,原来的列表不发生改变。sorted()函数可以接收一个key参数,可以用来指定排序的规则。

key参数是一个函数,可以接收一个参数,返回一个用来排序的值。sorted()函数会按照这个值来进行排序,如果两个元素的排序值相同,则会按照它们在原列表中的顺序排列。

下面是一个简单的例子,我们想要对一个字符串列表进行排序,但是按照字符串的长度进行排序:

list1 = ["python", "java", "c", "javascript"]
sorted_list1 = sorted(list1, key=len)
print(sorted_list1)

输出结果为:

['c', 'java', 'python', 'javascript']

可以看到,在排序的过程中,会根据字符串的长度来进行排序,所以按照长度递增的顺序输出。这个例子中,key=len就是一个函数,用来计算字符串的长度。

那么,key参数可以是哪些函数呢?下面是一些常见的使用方式:

### 1. 对字典的值进行排序

如果我们想要对一个字典进行排序,可以通过使用字典的values()方法来获取所有的值,然后使用len()函数对这些值进行排序,再根据排序后的值,得到原字典中对应的键值对。

dict1 = {"a": 3, "b": 1, "c":2}
sorted_dict1 = sorted(dict1.items(), key=lambda x: x[1])
print(sorted_dict1)

这里的key参数是一个匿名函数,可以接收一个元组,元组的第1个元素是键,第2个元素是值。这个函数根据元组的第2个元素来进行排序。

输出结果为:

[('b', 1), ('c', 2), ('a', 3)]

可以看到,输出的结果是按照字典中的值进行排序的。

### 2. 对元组的某个元素进行排序

如果要对元组的某个元素进行排序,可以通过指定元组的下标来进行排序。

list2 = [(1, 3), (2, 2), (3, 1)]
sorted_list2 = sorted(list2, key=lambda x: x[1])
print(sorted_list2)

这个例子中,我们想要对list2中的元组,按照它们的第2个元素(也就是每个元组的第二个数字)进行排序。

输出结果为:

[(3, 1), (2, 2), (1, 3)]

可以看到,输出结果是按照元组的第2个元素进行排序的。

### 3. 多级排序

有时候我们需要按照多个条件进行排序。这时可以使用多个排序参数。

list3 = [("b", 3), ("a", 1), ("c", 2), ("b", 2)]
sorted_list3 = sorted(list3, key=lambda x: (x[0], -x[1]))
print(sorted_list3)

这里我们想要按照元组的第1个元素进行排序,如果第1个元素相同,则按照第2个元素递减的顺序进行排序。

输出结果为:

[('a', 1), ('b', 3), ('b', 2), ('c', 2)]

可以看到,当第1个元素相同的元组,按照第2个元素递减的顺序进行了排序。

### 4. 自定义排序函数

如果我们想要自己定义一个排序函数,可以使用Python的Lambda表达式。

list4 = ["python", "java", "c", "javascript"]
sorted_list4 = sorted(list4, key=lambda x: ''.join(sorted(x)))
print(sorted_list4)

这里我们想要按照每个字符串的排序后的结果进行排序,可以使用join()函数,将排序后的字符列表合并成一个字符串。

输出结果为:

['c', 'java', 'javascript', 'python']

可以看到,按照字符串排序后的结果,输出了一个新的排序列表。

总结:

sorted()函数是Python内置的排序函数,可以对列表进行排序。sorted()函数的key参数是一个函数,可以用来指定排序的规则。在key参数中,可以使用常用的函数、字典、元组等数据类型作为排序参数,还可以使用自定义的排序函数。通过key参数可以实现灵活的排序规则,更好的满足不同的需求。