从一到题目来熟悉python集合语法

109 阅读5分钟

题目

选择一到简单的倒排索引来作为这次的例题。

可以很明显的发现,我们传入了两个list,将他设置为两个集合,然后求他们的交集,并按照从大到小的顺序排序即可。

def solution(a, b):
    # 使用集合操作找出两个列表的交集
    intersection = set(a) & set(b)
    # 将交集结果转为列表并按从大到小的顺序排序
    result = sorted(intersection, reverse=True)
    return result

if __name__ == '__main__':
    print(solution([1, 2, 3, 7], [2, 5, 7]) == [7, 2])
    print(solution([1, 4, 8, 10], [2, 4, 8, 10]) == [10, 8, 4])
    print(solution([3, 5, 9], [1, 4, 6]) == [])
    print(solution([1, 2, 3], [1, 2, 3]) == [3, 2, 1])
  • 使用 set 将两个列表转为集合,可以快速求交集。

  • 使用 set(a) & set(b) 得到两个集合的交集。

  • 使用 sorted 对交集进行降序排序,返回结果。

python的集合操作

集合(set)是 Python 中非常强大且灵活的数据类型之一,专门用于存储 无序不重复 的元素集合。它是基于数学集合理论实现的,支持集合的基本操作如交集、并集、差集等,同时也提供了丰富的方法用于高效地处理数据。

1. 创建集合

集合可以通过两种方式创建:

1.1 使用大括号{}

直接用大括号列出元素即可创建集合:

python
复制代码
# 创建一个集合
my_set = {1, 2, 3, 4, 5}
print(my_set)  # 输出:{1, 2, 3, 4, 5}
  • 注意:集合中的元素是 无序的,因此打印结果的顺序可能与声明顺序不同。

  • 重复元素会被自动去重

    python
    复制代码
    my_set = {1, 2, 2, 3}
    print(my_set)  # 输出:{1, 2, 3}
    
1.2 使用 set() 构造函数

如果数据源是列表、元组或字符串等其他可迭代对象,可以用 set() 构造集合:

python
复制代码
# 从列表创建集合
my_set = set([1, 2, 3, 4, 5, 5])
print(my_set)  # 输出:{1, 2, 3, 4, 5}

# 从字符串创建集合(会去重)
my_set = set("hello")
print(my_set)  # 输出:{'h', 'e', 'l', 'o'}
  • 空集合:空集合不能用 {} 创建,必须使用 set()

    python
    复制代码
    empty_set = set()
    print(empty_set)  # 输出:set()
    

2. 集合的特性

2.1 元素的唯一性

集合自动去除重复值。例如:

python
复制代码
my_set = {1, 1, 2, 2, 3}
print(my_set)  # 输出:{1, 2, 3}
2.2 元素的不可变性

集合的元素必须是不可变类型,例如数字、字符串或元组。

python
复制代码
# 正确
my_set = {1, "hello", (1, 2, 3)}

# 错误:列表是可变的,不能作为集合的元素
my_set = {1, [1, 2, 3]}  # 会抛出TypeError

3. 集合的基本操作

3.1 添加元素

使用 add() 方法添加元素:

python
复制代码
my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 输出:{1, 2, 3, 4}
  • 如果添加的元素已存在,集合不会有任何变化。

    python
    复制代码
    my_set.add(3)
    print(my_set)  # 输出:{1, 2, 3, 4}
    
3.2 删除元素
  • 使用 remove() 方法删除指定元素:

    python
    复制代码
    my_set = {1, 2, 3}
    my_set.remove(2)
    print(my_set)  # 输出:{1, 3}
    

    如果元素不存在,会抛出 KeyError

  • 使用 discard() 方法删除元素:

    python
    复制代码
    my_set = {1, 2, 3}
    my_set.discard(2)
    print(my_set)  # 输出:{1, 3}
    

    如果元素不存在,不会抛出错误。

  • 使用 pop() 随机删除一个元素:

    python
    复制代码
    my_set = {1, 2, 3}
    removed = my_set.pop()
    print(removed)  # 输出:随机删除的元素
    print(my_set)   # 输出:剩余的集合
    
  • 使用 clear() 清空集合:

    python
    复制代码
    my_set = {1, 2, 3}
    my_set.clear()
    print(my_set)  # 输出:set()
    

4. 集合运算

Python 提供了一系列集合运算符和方法,用于高效地处理集合之间的关系。

4.1 交集

找出两个集合的共有元素。

  • 使用 & 运算符:

    python
    复制代码
    set1 = {1, 2, 3}
    set2 = {2, 3, 4}
    result = set1 & set2
    print(result)  # 输出:{2, 3}
    
  • 使用 intersection() 方法:

    python
    复制代码
    result = set1.intersection(set2)
    print(result)  # 输出:{2, 3}
    
4.2 并集

将两个集合的所有元素合并(去重)。

  • 使用 | 运算符:

    python
    复制代码
    result = set1 | set2
    print(result)  # 输出:{1, 2, 3, 4}
    
  • 使用 union() 方法:

    python
    复制代码
    result = set1.union(set2)
    print(result)  # 输出:{1, 2, 3, 4}
    
4.3 差集

找出只在一个集合中存在的元素。

  • 使用 - 运算符:

    python
    复制代码
    result = set1 - set2
    print(result)  # 输出:{1}
    
  • 使用 difference() 方法:

    python
    复制代码
    result = set1.difference(set2)
    print(result)  # 输出:{1}
    
4.4 对称差集

找出只在一个集合中存在,而不同时存在于两个集合中的元素。

  • 使用 ^ 运算符:

    python
    复制代码
    result = set1 ^ set2
    print(result)  # 输出:{1, 4}
    
  • 使用 symmetric_difference() 方法:

    python
    复制代码
    result = set1.symmetric_difference(set2)
    print(result)  # 输出:{1, 4}
    

5. 集合方法

以下是集合支持的一些常用方法:

5.1 检查子集和超集
  • issubset():判断一个集合是否是另一个集合的子集。

    python
    复制代码
    set1 = {1, 2}
    set2 = {1, 2, 3}
    print(set1.issubset(set2))  # 输出:True
    
  • issuperset():判断一个集合是否是另一个集合的超集。

    python
    复制代码
    print(set2.issuperset(set1))  # 输出:True
    
5.2 检查交集
  • isdisjoint():判断两个集合是否没有交集。

    python
    复制代码
    set1 = {1, 2}
    set2 = {3, 4}
    print(set1.isdisjoint(set2))  # 输出:True
    
5.3 复制集合
  • 使用 copy() 方法创建集合的副本:

    python
    复制代码
    set1 = {1, 2, 3}
    set_copy = set1.copy()
    print(set_copy)  # 输出:{1, 2, 3}
    

一些简单的实例

示例1:数据去重

快速去重是集合最常见的应用场景:

python
复制代码
data = [1, 2, 2, 3, 4, 4, 5]
unique_data = list(set(data))
print(unique_data)  # 输出:[1, 2, 3, 4, 5]
示例2:快速查找公共元素

假设有两个学生名单,找到两个班级的共同学生:

python
复制代码
class1 = {"Alice", "Bob", "Charlie"}
class2 = {"Bob", "David", "Charlie"}
common_students = class1 & class2
print(common_students)  # 输出:{'Bob', 'Charlie'}

有关于豆包ai

这一次豆包marcodes直接秒了这道题,对与题目的分析也比较合适,重点是通过这个可以学习很多python的集合相关的语法。