本文目录导读:

我来详细介绍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集合的常用操作,集合特别适合用于去重、成员检查和集合运算等场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播