本文目录导读:

我来详细介绍Python中集合(set)的各种操作方法和案例。
集合的创建
# 创建空集合
empty_set = set()
print(type(empty_set)) # <class 'set'>
# 创建包含元素的集合
fruits = {'apple', 'banana', 'orange'}
numbers = set([1, 2, 3, 4, 5])
# 使用字符串创建集合(每个字符是元素)
chars = set('hello')
print(chars) # {'h', 'e', 'l', 'o'},注意l只出现一次
# 集合推导式
squares = {x**2 for x in range(5)}
print(squares) # {0, 1, 4, 9, 16}
添加元素
# add() - 添加单个元素
fruits = {'apple', 'banana'}
fruits.add('orange')
print(fruits) # {'apple', 'banana', 'orange'}
# update() - 添加多个元素
fruits.update(['grape', 'kiwi'])
print(fruits) # {'apple', 'banana', 'orange', 'grape', 'kiwi'}
# update() 也可以添加其他集合
more_fruits = {'pear', 'peach'}
fruits.update(more_fruits)
删除元素
# remove() - 删除元素,不存在会引发KeyError
fruits = {'apple', 'banana', 'orange'}
fruits.remove('banana')
print(fruits) # {'apple', 'orange'}
# fruits.remove('watermelon') # KeyError!
# discard() - 删除元素,不存在不会报错
fruits.discard('orange')
fruits.discard('watermelon') # 不会报错
print(fruits) # {'apple'}
# pop() - 随机删除并返回一个元素
fruits = {'apple', 'banana', 'orange'}
removed = fruits.pop()
print(f"删除的元素: {removed}")
print(f"剩余集合: {fruits}")
# clear() - 清空集合
fruits.clear()
print(fruits) # set()
集合操作
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# 并集
union1 = set1 | set2
union2 = set1.union(set2)
print(f"并集: {union1}") # {1, 2, 3, 4, 5, 6, 7, 8}
# 交集
intersection1 = set1 & set2
intersection2 = set1.intersection(set2)
print(f"交集: {intersection1}") # {4, 5}
# 差集(set1中有但set2中没有)
diff1 = set1 - set2
diff2 = set1.difference(set2)
print(f"差集: {diff1}") # {1, 2, 3}
# 对称差集(两个集合中不同时存在的元素)
sym_diff1 = set1 ^ set2
sym_diff2 = set1.symmetric_difference(set2)
print(f"对称差集: {sym_diff1}") # {1, 2, 3, 6, 7, 8}
关系判断
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
set_c = {1, 2, 3}
# 子集判断
print(set_a.issubset(set_b)) # True - set_a是set_b的子集
print(set_a <= set_b) # True
# 超集判断
print(set_b.issuperset(set_a)) # True - set_b是set_a的超集
print(set_b >= set_a) # True
# 真子集
print(set_a < set_b) # True
# 不相交集
set_x = {1, 2, 3}
set_y = {4, 5, 6}
print(set_x.isdisjoint(set_y)) # True - 没有共同元素
集合的遍历和转换
# 遍历集合
fruits = {'apple', 'banana', 'orange'}
for fruit in fruits:
print(fruit) # 顺序不确定
# 集合转列表
fruit_list = list(fruits)
print(fruit_list)
# 集合转元组
fruit_tuple = tuple(fruits)
print(fruit_tuple)
# 列表去重(使用集合)
numbers = [1, 2, 2, 3, 3, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers) # [1, 2, 3, 4, 5]
实际应用案例
案例1:统计文章中出现的单词
def unique_words_count(text):
# 清理文本并分割
words = text.lower().split()
# 使用集合去重
unique_words = set(words)
return len(unique_words), unique_words
text = "Python is great and Python is fun"
count, words = unique_words_count(text)
print(f"不重复单词数: {count}") # 5
print(f"单词集合: {words}") # {'and', 'python', 'great', 'fun', 'is'}
案例2:查找两个列表的共同元素
def find_common_elements(list1, list2):
set1 = set(list1)
set2 = set(list2)
return set1 & set2 # 交集
students_class_a = ['张三', '李四', '王五', '赵六']
students_class_b = ['李四', '钱七', '王五', '孙八']
common = find_common_elements(students_class_a, students_class_b)
print(f"两个班级共同的学生: {common}") # {'李四', '王五'}
案例3:数据去重和状态管理
class TaskManager:
def __init__(self):
self.completed_tasks = set()
self.pending_tasks = set()
def add_task(self, task):
self.pending_tasks.add(task)
def complete_task(self, task):
if task in self.pending_tasks:
self.pending_tasks.remove(task)
self.completed_tasks.add(task)
return True
return False
def get_pending_count(self):
return len(self.pending_tasks)
def get_completed_count(self):
return len(self.completed_tasks)
# 使用示例
manager = TaskManager()
manager.add_task('学习Python')
manager.add_task('写报告')
manager.add_task('学习Python') # 不会重复添加
print(f"待完成任务数: {manager.get_pending_count()}") # 2
manager.complete_task('学习Python')
print(f"已完成任务: {manager.completed_tasks}") # {'学习Python'}
这些是Python集合的常用操作,集合特别适合用于去重、成员检查和集合运算等场景。