用python3)编写函数,模拟内置函数 sorted()。
时间: 2023-11-10 15:11:57 浏览: 87
可以参考以下代码实现:
```python
def my_sorted(iterable, key=None, reverse=False):
# 如果没有传入 key 函数,则默认使用元素本身作为排序依据
if key is None:
key = lambda x: x
# 按照 key 函数生成新的元素列表
new_list = [(key(x), x) for x in iterable]
# 根据 key 函数生成的元素列表排序
new_list.sort(reverse=reverse)
# 返回排好序的元素列表中的元素
return [x[1] for x in new_list]
# 测试
lst = [5, 3, 8, 6, 2, 7, 1, 4]
print(my_sorted(lst)) # [1, 2, 3, 4, 5, 6, 7, 8]
lst = ["apple", "banana", "orange", "pear"]
print(my_sorted(lst, key=len)) # ['pear', 'apple', 'banana', 'orange']
lst = [(1, 2), (3, 1), (2, 3), (1, 3)]
print(my_sorted(lst, key=lambda x: x[1])) # [(3, 1), (1, 2), (2, 3), (1, 3)]
```
在这个函数中,我们首先判断是否传入了 `key` 函数,如果没有传入,则使用 lambda 函数返回元素本身作为排序依据。接着,我们按照 `key` 函数生成新的元素列表,其中每个元素都是一个二元组,第一个元素为 `key` 函数生成的值,第二个元素为原来的元素。
然后,我们对这个新的元素列表进行排序,排序时根据第一个元素排序,也就是根据 `key` 函数生成的值排序。最后,我们再取出排好序的元素列表中的第二个元素,也就是原来的元素,组成新的列表返回即可。
需要注意的是,我们实现的 `my_sorted` 函数并不能处理所有的情况,比如不能处理包含不可比较的元素的列表。但是,这个函数足以模拟内置函数 `sorted` 的大部分功能。
阅读全文