蓝桥杯python自定义排序
时间: 2025-05-16 14:01:35 浏览: 17
### 蓝桥杯 Python 自定义排序的实现
在蓝桥杯比赛中,`functools.cmp_to_key` 函数可以用来将传统的比较函数转化为适用于 `sorted()` 的键函数。以下是关于其具体用法和示例代码。
#### 使用 cmp_to_key 实现自定义排序
`cmp_to_key` 将一个比较函数(返回 -1、0 或 1)转换为可以在 `sorted()` 中使用的键函数[^3]。这使得我们可以灵活地按照特定规则对列表或其他可迭代对象进行排序。
下面是一个简单的例子:
```python
from functools import cmp_to_key
def compare(x, y):
if x < y:
return -1
elif x > y:
return 1
else:
return 0
data = [5, 2, 9, 1]
result = sorted(data, key=cmp_to_key(compare))
print(result) # 输出: [1, 2, 5, 9]
```
在这个例子中,我们通过 `compare` 函数实现了从小到大的排序逻辑,并将其传递给 `sorted()` 函数作为关键字参数。
#### 复杂场景下的应用
当需要更复杂的排序规则时,比如按字符串长度或者数值大小降序排列,也可以利用此方法完成。例如:
```python
from functools import cmp_to_key
def custom_compare(a, b):
if len(str(a)) < len(str(b)):
return -1
elif len(str(a)) > len(str(b)):
return 1
else:
if a < b:
return -1
elif a > b:
return 1
else:
return 0
numbers = [123, 45, 789, 1, 3456]
sorted_numbers = sorted(numbers, key=cmp_to_key(custom_compare))
print(sorted_numbers) # 输出基于字符串长度优先级的结果
```
上述代码展示了如何先依据字符串表示形式的长度再根据实际值来决定顺序。
#### 结合拓扑排序的应用
如果涉及到图结构上的节点排序问题,则可能需要用到拓扑排序配合自定义规则一起工作。例如,在某些情况下我们需要调整默认字典序以满足题目特殊需求时,就可以引入类似的思路[^2]。
---
阅读全文
相关推荐



















