python3中sorted函数里cmp参数改变详解

1. 介绍sorted函数

在Python中,sorted()函数是一种对序列进行排序的方法。它可以对列表、元组、字符串等可迭代对象进行排序,并返回一个新的排序后的列表。

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

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

其中,iterable是要排序的可迭代对象,key是用于指定排序规则的函数,reverse是一个布尔值,用于控制排序结果的升序或降序。

2. 默认排序规则

当不指定key参数时,sorted()函数会使用默认的排序规则。对于数字、字符串等基本类型的元素,会按照字典序进行排序。

下面是一个示例,展示了对一个包含整数、浮点数和字符串的列表进行排序:

data = [10, 5.6, 3, 'apple', 'orange']

result = sorted(data)

print(result)

输出结果为:

[10, 3, 5.6, 'apple', 'orange']

可以看到,数字按照大小进行排序,而字符串按照字母顺序进行排序。

3. 自定义排序规则

3.1 使用key参数

如果要根据元素的某个属性或特征进行排序,可以使用key参数来指定一个函数,该函数将会作为排序的依据。

下面是一个示例,展示了对一个包含字典元素的列表进行排序,根据字典中的值进行排序:

data = [{'name': 'apple', 'price': 5}, {'name': 'orange', 'price': 3}, {'name': 'banana', 'price': 2}]

result = sorted(data, key=lambda x: x['price'])

print(result)

输出结果为:

[{'name': 'banana', 'price': 2}, {'name': 'orange', 'price': 3}, {'name': 'apple', 'price': 5}]

在这个示例中,我们使用了lambda函数作为key参数,该函数根据字典中的'price'键的值进行排序。

3.2 使用reverse参数

reverse参数可用于控制排序结果的升序或降序。默认情况下reverse为False,代表升序排序;当reverse为True时,代表降序排序。

下面是一个示例,展示了对一个包含整数的列表进行降序排序:

data = [5, 3, 10, 2]

result = sorted(data, reverse=True)

print(result)

输出结果为:

[10, 5, 3, 2]

4. cmp参数的改变

在Python 2.x中,sorted()函数还提供了一个cmp参数,用于指定自定义的比较函数。该函数接收两个参数,返回一个整数,代表两个参数的大小关系。如果cmp函数返回负数,则第一个参数小于第二个参数;如果返回正数,则第一个参数大于第二个参数;如果返回0,则两个参数相等。

但是,在Python 3中,cmp参数已经被移除,不再支持。这是因为cmp参数可以通过key参数和reverse参数的组合来替代,使用起来更加灵活。

5. 示例:使用cmp参数的旧版本代码

下面是一个示例,展示了在Python 2.x中对一个包含字符串的列表进行排序,使用自定义的cmp函数:

data = ['apple', 'orange', 'banana']

def cmp_func(a, b):

if len(a) < len(b):

return -1

elif len(a) > len(b):

return 1

else:

return 0

result = sorted(data, cmp=cmp_func)

print(result)

输出结果为:

['apple', 'orange', 'banana']

在这个示例中,我们定义了一个cmp_func函数,用于比较两个字符串的长度。通过将这个函数传递给cmp参数,sorted()函数可以根据字符串的长度进行排序。

6. 示例:使用key参数的新版本代码

在Python 3中,我们可以使用key参数来实现相同的排序效果,而不需要使用cmp参数。

data = ['apple', 'orange', 'banana']

result = sorted(data, key=len)

print(result)

输出结果为:

['apple', 'orange', 'banana']

在这个示例中,我们使用len函数作为key参数,sorted()函数会根据字符串的长度进行排序。

7. 总结

在Python 3中,sorted()函数的cmp参数已经被移除,不再支持。然而,通过使用key参数和reverse参数的组合,我们可以实现类似的排序效果。

使用key参数时,可以指定一个函数,根据函数的返回值来排序。而使用reverse参数时,可以控制升序或降序排序。

通过灵活地使用这两个参数,我们可以根据不同的需求进行排序,提高代码的可读性和可维护性。

后端开发标签