1 集合概述
集合(set)是一个无序的不重复元素序列,用于存储多个唯一的元素, 集合支持数学中的集合操作,如并集、交集、差集等。
1.1 集合的特点
无序:集合中的元素没有特定的顺序,因此不能通过索引访问元素。
唯一性:集合中的元素必须是唯一的,重复的元素会被自动去除。
可变性:集合本身是可变的,可以添加或删除元素,但集合中的元素必须是不可变类型(如数字、字符串、元组等)
1.2 集合适用场景
集合是一种无序且不重复的数据结构,适用于需要去除重复元素、进行数学集合运算等场景。集合支持多种操作和方法,可以帮助你高效地处理数据。如果需要一个专门用于存储唯一元素的集合,集合(set)是一个非常合适的选择。
2 集合的定义
2.1 使用花括号 {}构建集合
# 定义一个集合
fruits = {"apple", "banana", "cherry"}
2.2 使用 set() 构造函数
# 从列表创建集合
fruits = set(["apple", "banana", "cherry"])
3 集合的基本操作
3.1 添加元素
add(element):向集合中添加一个元素。
fruits = {"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits) # 输出:{'apple', 'banana', 'cherry', 'orange'}
update(elements):向集合中添加多个元素(可以是列表、元组、另一个集合等)
fruits = {"apple", "banana", "cherry"}
fruits.update(["orange", "grape"]) # 将列表元素更新入集合fruits
print(fruits) # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape'}
update() 方法注意事项
当使用 update() 方法时,传入的参数需要是一个可迭代对象(列表、元组、集合等)
- 列表:将元素放在方括号 [] 中,列表元素被迭代添加至集合
- 元组:将元素放在圆括号 () 中,元组元素被迭代添加至集合
- 集合:将元素放在花括号 {} 中,集合元素被迭代添加至集合
fruits = {"apple", "banana", "cherry"}
# 使用列表作为参数
fruits.update(["orange", "grape"])
print(fruits) # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape'}
# 使用元组作为参数
fruits.update(("watermelon", "kiwi"))
print(fruits) # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape', 'watermelon', 'kiwi'}
# 使用另一个集合作为参数
more_fruits = {"mango", "pineapple"}
fruits.update(more_fruits)
print(fruits) # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape', 'watermelon', 'kiwi', 'mango', 'pineapple'}
add()注意事项
集合中的元素必须是不可变类型(如字符串、数字、元组等),而列表是可变类型,不能作为集合的元素。
fruits = {"apple", "banana", "cherry"}
fruits.add(["orange", "grape"]) # 注意:这会引发 TypeError,因为列表是可变的,不能作为集合的元素
# TypeError: unhashable type: 'list'
fruits = {"apple", "banana", "cherry"}
fruits.add(("orange", "grape")) # 元组是不可变的,可以作为集合的元素
print(fruits) # {'apple', ('orange', 'grape'), 'cherry', 'banana'}
3.2 删除元素
remove(element):删除指定元素。如果元素不存在,会引发 KeyError
fruits = {"apple", "banana", "cherry"}
fruits.remove("banana")
print(fruits) # 输出:{'apple', 'cherry'}
discard(element):删除指定元素。如果元素不存在,不会引发错误
fruits = {"apple", "banana", "cherry"}
fruits.discard("banana")
print(fruits) # 输出:{'apple', 'cherry'}
fruits.discard("orange") # 不会引发错误
pop():随机删除并返回一个元素(集合无序,无法指定删除哪个元素)
fruits = {"apple", "banana", "cherry"}
removed_fruit = fruits.pop()
print(removed_fruit) # 输出:可能是 'apple'、'banana' 或 'cherry' 中的一个
print(fruits) # 输出:剩下的两个元素
clear():清空集合
fruits = {"apple", "banana", "cherry"}
fruits.clear()
print(fruits) # 输出:set()
4 集合运算
并集
并集:使用 union() 方法或 | 运算符,返回两个集合的所有元素(去重)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3) # 输出:{1, 2, 3, 4, 5}
# 或使用 | 运算符
set3 = set1 | set2
print(set3) # 输出:{1, 2, 3, 4, 5}
交集
交集:使用 intersection() 方法或 & 运算符,返回两个集合的公共元素
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3) # 输出:{1, 2, 3, 4, 5}
# 或使用 | 运算符
set3 = set1 | set2
print(set3) # 输出:{1, 2, 3, 4, 5}
差集
差集:使用 difference() 方法或 - 运算符,返回第一个集合中有而第二个集合中没有的元素。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.difference(set2)
print(set3) # 输出:{1, 2}
# 或使用 - 运算符
set3 = set1 - set2
print(set3) # 输出:{1, 2}
对称差集
对称差集:使用 symmetric_difference() 方法或 ^ 运算符,返回两个集合中不共有的元素。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.symmetric_difference(set2)
print(set3) # 输出:{1, 2, 4, 5}
# 或使用 ^ 运算符
set3 = set1 ^ set2
print(set3) # 输出:{1, 2, 4, 5}
5 集合比较
issubset(other_set):判断当前集合是否是另一个集合的子集
set1 = {1, 2}
set2 = {1, 2, 3, 4}
print(set1.issubset(set2)) # 输出:True
issuperset(other_set):判断当前集合是否是另一个集合的超集
set1 = {1, 2, 3, 4}
set2 = {1, 2}
print(set1.issuperset(set2)) # 输出:True
isdisjoint(other_set):判断两个集合是否没有交集
set1 = {1, 2}
set2 = {3, 4}
print(set1.isdisjoint(set2)) # 输出:True
总结
方法 | 描述 |
---|---|
add(element) | 向集合中添加一个元素。 |
update(elements) | 向集合中添加多个元素(可以是列表、元组、另一个集合等)。 |
remove(element) | 删除指定元素。如果元素不存在,会引发 KeyError 。 |
discard(element) | 删除指定元素。如果元素不存在,不会引发错误。 |
pop() | 随机删除并返回一个元素。 |
clear() | 清空集合。 |
union(other_set) | 返回两个集合的并集。 |
intersection(other_set) | 返回两个集合的交集。 |
difference(other_set) | 返回两个集合的差集(第一个集合中有而第二个集合中没有的元素)。 |
symmetric_difference(other_set) | 返回两个集合的对称差集(两个集合中不共有的元素)。 |
issubset(other_set) | 判断当前集合是否是另一个集合的子集。 |
issuperset(other_set) | 判断当前集合是否是另一个集合的超集。 |
isdisjoint(other_set) | 判断两个集合是否没有交集。 |