Python数据结构:集合详解(创建、集合操作)④

在这里插入图片描述

Python集合是一种无序、不重复元素的集。集合操作在处理数据的去重、成员关系测试等方面非常高效。本文将详细介绍Python集合的创建和各种集合操作,最后附上一个综合详细的例子,帮助您全面掌握Python集合的用法。

1. Python集合概述

集合(set)是Python内置的数据类型之一,用于存储多个不重复的元素。集合中的元素必须是可哈希的(immutable),这意味着列表和字典不能作为集合的元素,但元组可以。

2. 创建集合

2.1 使用花括号 {} 创建集合

最常用的创建集合的方法是使用花括号 {}

# 创建一个包含若干整数的集合
numbers = {1, 2, 3, 4, 5}
print(numbers)  # 输出: {1, 2, 3, 4, 5}
2.2 使用 set() 函数创建集合

可以使用 set() 函数将其他数据类型转换为集合。

# 从列表创建集合
numbers_list = [1, 2, 3, 4, 5, 5]
numbers_set = set(numbers_list)
print(numbers_set)  # 输出: {1, 2, 3, 4, 5}

# 从字符串创建集合
string_set = set("hello")
print(string_set)  # 输出: {'h', 'e', 'l', 'o'}
2.3 创建空集合

创建空集合时,必须使用 set() 函数,而不是 {},因为 {} 会创建一个空字典。

# 创建空集合
empty_set = set()
print(empty_set)  # 输出: set()

3. 集合操作

3.1 添加和删除元素

集合支持添加和删除元素的操作。

# 添加元素
fruits = {"apple", "banana"}
fruits.add("cherry")
print(fruits)  # 输出: {'banana', 'cherry', 'apple'}

# 删除元素
fruits.remove("banana")
print(fruits)  # 输出: {'cherry', 'apple'}

# 使用 discard 删除元素,如果元素不存在也不会报错
fruits.discard("banana")
print(fruits)  # 输出: {'cherry', 'apple'}

# 使用 pop 删除并返回一个随机元素
popped_fruit = fruits.pop()
print(popped_fruit)  # 输出: cherry (结果可能不同)
print(fruits)  # 输出: {'apple'} (结果可能不同)
3.2 集合的基本操作

集合支持一系列基本操作,如并集、交集、差集和对称差集。

set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

# 并集
union_set = set_a | set_b
print(union_set)  # 输出: {1, 2, 3, 4, 5, 6}

# 交集
intersection_set = set_a & set_b
print(intersection_set)  # 输出: {3, 4}

# 差集
difference_set = set_a - set_b
print(difference_set)  # 输出: {1, 2}

# 对称差集
symmetric_difference_set = set_a ^ set_b
print(symmetric_difference_set)  # 输出: {1, 2, 5, 6}
3.3 集合的比较操作

集合之间可以进行各种比较操作。

set_a = {1, 2}
set_b = {1, 2, 3, 4}

# 子集
is_subset = set_a <= set_b
print(is_subset)  # 输出: True

# 真子集
is_proper_subset = set_a < set_b
print(is_proper_subset)  # 输出: True

# 超集
is_superset = set_b >= set_a
print(is_superset)  # 输出: True

# 真超集
is_proper_superset = set_b > set_a
print(is_proper_superset)  # 输出: True
3.4 不可变集合(frozenset)

Python 提供了 frozenset,一种不可变的集合。一旦创建,frozenset 中的元素就不能被改变。

# 创建 frozenset
immutable_set = frozenset([1, 2, 3, 4])
print(immutable_set)  # 输出: frozenset({1, 2, 3, 4})

# 尝试添加元素会报错
# immutable_set.add(5)  # AttributeError: 'frozenset' object has no attribute 'add'

4. 综合例子:图书管理系统

以下是一个图书管理系统的例子,展示了集合在处理图书标签中的应用。

class Library:
    def __init__(self):
        self.books = {}

    def add_book(self, title, author, year, tags):
        """
        添加图书信息
        :param title: 图书标题
        :param author: 图书作者
        :param year: 出版年份
        :param tags: 图书标签(集合)
        """
        if title in self.books:
            print(f"书籍 '{title}' 已存在。")
        else:
            self.books[title] = {
                "author": author,
                "year": year,
                "tags": set(tags)
            }
            print(f"书籍 '{title}' 添加成功。")

    def remove_book(self, title):
        """
        删除图书信息
        :param title: 图书标题
        """
        if title in self.books:
            del self.books[title]
            print(f"书籍 '{title}' 已删除。")
        else:
            print(f"书籍 '{title}' 未找到。")

    def update_tags(self, title, new_tags):
        """
        更新图书标签
        :param title: 图书标题
        :param new_tags: 新标签(集合)
        """
        if title in self.books:
            self.books[title]["tags"].update(new_tags)
            print(f"书籍 '{title}' 的标签已更新。")
        else:
            print(f"书籍 '{title}' 未找到。")

    def search_by_tag(self, tag):
        """
        根据标签搜索图书
        :param tag: 标签
        :return: 包含该标签的图书列表
        """
        result = [title for title, info in self.books.items() if tag in info["tags"]]
        return result

    def display_books(self):
        """
        显示所有图书信息
        """
        if not self.books:
            print("图书馆中没有书籍。")
        else:
            for title, info in self.books.items():
                print(f"标题: {title}, 作者: {info['author']}, 出版年份: {info['year']}, 标签: {info['tags']}")

# 创建图书馆实例
library = Library()

# 添加图书
library.add_book("Python编程", "Guido van Rossum", 1991, {"编程", "Python", "计算机"})
library.add_book("学习Python", "Mark Lutz", 2013, {"编程", "Python", "教程"})
library.add_book("深入理解计算机系统", "Randal E. Bryant", 2015, {"计算机", "系统", "基础"})

# 更新标签
library.update_tags("Python编程", {"经典", "入门"})

# 搜索图书
search_result = library.search_by_tag("Python")
print("包含标签 'Python' 的书籍:", search_result)

# 显示所有图书
library.display_books()

运行结果如下:
在这里插入图片描述

在这个综合详细的例子中,我们实现了一个简单的图书管理系统,展示了集合在处理图书标签中的应用。通过这个例子,我们可以看到集合的创建、操作和应用场景。希望本文对您理解和应用Python集合有所帮助。


欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

在这里插入图片描述

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓瑞军说HelloWorld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值