python中sorted set
时间: 2025-01-06 09:34:55 浏览: 4
### Python `sorted` 函数与 `set` 集合的用法
#### 使用 `sorted()` 对列表进行排序并去除重复项
在 Python 中,可以利用内置的 `sorted()` 函数来创建一个新的已排序列表副本。此函数接受任何可迭代对象作为输入参数,并返回一个按照升序排列的新列表。
为了消除重复元素,在调用 `sorted()` 前先将数据转换成 `set` 类型。由于集合中的成员是唯一的,因此这一步骤会自动过滤掉所有的冗余条目[^1]。
```python
items = [4, 1, 2, 7, 3, 9, 1, 4]
unique_sorted_items = sorted(set(items))
print(unique_sorted_items)
```
上述代码片段展示了如何结合使用 `sorted()` 和 `set` 来获取唯一且有序的结果集。
#### 反向排序去重后的序列
如果希望得到降序排列的数据,则可以在传递给 `sorted()` 的关键字参数中指定 `reverse=True`:
```python
reversed_unique_sorted_items = sorted(set(items), reverse=True)
print(reversed_sorted_items)
```
这段程序能够实现从大到小顺序输出不含有相同数值的数组。
#### 自定义键函数处理复杂结构
对于更复杂的场景比如字典组成的列表,可以通过提供自定义的关键字提取器(key function),让 `sorted()` 根据特定字段来进行比较操作。
假设有一个包含多个学生记录的列表,每个记录都是由姓名和成绩构成的元组形式表示的学生信息表单如下所示:
```python
students_scores = [("Alice", 88), ("Bob", 95), ("Charlie", 88)]
# 按照分数高低对学生名单做逆序整理的同时移除同分者
distinct_by_score_descending = sorted(
{score for name, score in students_scores},
key=lambda s: (-s,)
)
for score in distinct_by_score_descending:
names_at_this_level = ", ".join([
name for (name, sc) in students_scores if sc == score])
print(f"{names_at_this_level}: Score={score}")
```
这里通过构建临时集合的方式实现了基于成绩属性的筛选过程;而匿名 lambda 表达式的引入则允许我们灵活调整排序依据以及方向设置。
阅读全文