Python 程序设计 - 14. 集合 (set)
1. 引言
在 Python 中,集合(set)是一个无序的、不重复的数据集合。它的元素是唯一的,且没有索引,因此不像列表和元组那样可以通过索引来访问。集合提供了多种数学集合运算(如交集、并集、差集等),非常适合用于处理去重、集合运算等问题。
集合是一个非常灵活且高效的数据结构,通常用于:
- 去除重复数据
- 进行集合之间的运算(如并集、交集、差集)
- 存储不需要顺序的数据
2. 集合的基本概念
集合与列表、元组不同的地方在于:
- 无序性:集合中的元素没有顺序,也不能通过索引来访问。
- 唯一性:集合中的每个元素都是唯一的,自动去重。
- 可变性:集合是可变的(mutable),但是集合的元素必须是可哈希的(通常是不可变类型,如数字、字符串和元组)。
定义集合:
# 创建一个空集合
empty_set = set()
# 创建一个包含多个元素的集合
fruits = {"apple", "banana", "cherry"}
# 集合中的元素是唯一的,如果重复元素会自动去除
numbers = {1, 2, 3, 3, 2}
print(numbers) # 输出: {1, 2, 3}
注意:创建空集合时不能使用 {},因为 {} 代表的是空字典。如果想要创建空集合,必须使用 set()。
3. 集合的常用操作
3.1 添加元素
使用 add() 方法可以向集合中添加一个元素。添加的元素必须是可哈希的(不可变类型,如整数、字符串、元组等)。
fruits = {"apple", "banana", "cherry"}
# 使用 add() 向集合添加元素
fruits.add("orange")
print(fruits) # 输出: {'apple', 'banana', 'cherry', 'orange'}
3.2 删除元素
可以使用 remove()、discard()、pop() 和 clear() 来删除集合中的元素。
remove():删除指定元素,如果元素不存在,抛出KeyError。discard():删除指定元素,如果元素不存在,不抛出错误。pop():随机删除并返回一个元素。clear():删除集合中的所有元素。
fruits = {"apple", "banana", "cherry"}
# 使用 remove() 删除元素,如果元素不存在会引发 KeyError
fruits.remove("banana")
print(fruits) # 输出: {'apple', 'cherry'}
# 使用 discard() 删除元素,元素不存在不会报错
fruits.discard("banana") # 元素已被删除,不会报错
print(fruits) # 输出: {'apple', 'cherry'}
# 使用 pop() 随机删除一个元素
removed_item = fruits.pop()
print(f"删除的元素是: {removed_item}")
print(fruits) # 输出: 只剩下一个元素
# 使用 clear() 清空集合
fruits.clear()
print(fruits) # 输出: set()
3.3 集合的运算
集合提供了多种常见的数学运算,例如并集、交集、差集和对称差集。
union()或|:并集intersection()或&:交集difference()或-:差集symmetric_difference()或^:对称差集
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 并集
union_set = set1 | set2
print(union_set) # 输出: {1, 2, 3, 4, 5, 6}
# 交集
intersection_set = set1 & set2
print(intersection_set) # 输出: {3, 4}
# 差集
difference_set = set1 - set2
print(difference_set) # 输出: {1, 2}
# 对称差集
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set) # 输出: {1, 2, 5, 6}
3.4 集合的长度
使用 len() 函数可以获取集合中元素的个数。
fruits = {"apple", "banana", "cherry"}
print(len(fruits)) # 输出: 3
3.5 集合的成员测试
可以使用 in 运算符来测试某个元素是否在集合中。
fruits = {"apple", "banana", "cherry"}
# 检查元素是否在集合中
print("banana" in fruits) # 输出: True
print("orange" in fruits) # 输出: False
4. 集合的应用场景
集合主要用于以下场景:
- 去除重复元素:集合可以自动去除重复的元素,非常适合用于去重。
- 集合运算:集合支持数学上的并集、交集、差集和对称差集运算,这使得它在处理集合之间的关系时非常高效。
- 检查元素的存在性:通过集合的
in操作可以高效地检查某个元素是否在集合中。
例如,去重操作:
# 使用集合去除列表中的重复元素
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers)
print(unique_numbers) # 输出: {1, 2, 3, 4, 5}
5. 集合常见方法
| 方法 | 描述 |
|---|---|
add(x) | 向集合添加元素 x |
remove(x) | 删除集合中的元素 x,如果元素不存在抛出 KeyError |
discard(x) | 删除集合中的元素 x,如果元素不存在不抛出错误 |
pop() | 删除并返回集合中的一个元素 |
clear() | 清空集合 |
union(other_set) | 返回集合与 other_set 的并集 |
intersection(other_set) | 返回集合与 other_set 的交集 |
difference(other_set) | 返回集合与 other_set 的差集 |
symmetric_difference(other_set) | 返回集合与 other_set 的对称差集 |
copy() | 返回集合的浅拷贝 |
6. 练习题
练习 1:创建集合并进行去重
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers)
print(unique_numbers) # 输出: {1, 2, 3, 4, 5}
练习 2:集合运算
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 并集
print(set1 | set2) # 输出: {1, 2, 3, 4, 5, 6}
# 交集
print(set1 & set2) # 输出: {3, 4}
# 差集
print(set1 - set2) # 输出: {1, 2}
# 对称差集
print(set1 ^ set2) # 输出: {1, 2, 5, 6}
练习 3:检查元素是否在集合中
fruits = {"apple", "banana", "cherry"}
# 检查 "banana" 是否在集合中
print("banana" in fruits) # 输出: True
# 检查 "grape" 是否在集合中
print("grape" in fruits) # 输出: False
7. 总结
集合是 Python 中非常实用的数据结构,它的主要特点是无序和唯一性,适用于去重、集合运算以及高效的成员测试等操作。集合提供了多种数学集合运算,能够让你轻松地处理数据之间的关系。通过学习集合的基本操作,你可以更好地利用它来解决实际编程中的问题。
评论区