Python案例怎么操作集合?

wen python案例 11

本文目录导读:

Python案例怎么操作集合?

  1. 集合的创建
  2. 添加元素
  3. 删除元素
  4. 集合操作
  5. 关系判断
  6. 集合的遍历和转换
  7. 实际应用案例

我来详细介绍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集合的常用操作,集合特别适合用于去重、成员检查和集合运算等场景。

抱歉,评论功能暂时关闭!