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

在这里插入图片描述

文章目录

      • 1. Python集合概述
      • 2. 创建集合
        • 2.1 使用花括号 `{}` 创建集合
        • 2.2 使用 `set()` 函数创建集合
        • 2.3 创建空集合
      • 3. 集合操作
        • 3.1 添加和删除元素
        • 3.2 集合的基本操作
        • 3.3 集合的比较操作
        • 3.4 不可变集合(frozenset)
      • 4. 综合例子:图书管理系统

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集合有所帮助。


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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/871703.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

30秒内批量删除git本地分支

在开发过程中&#xff0c;我们经常需要对本地的 Git 分支进行管理。有时&#xff0c;由于各种原因&#xff0c;我们可能需要批量删除本地的分支。这可能是因为某些分支已经不再需要&#xff0c;或者是为了清理本地的分支列表&#xff0c;以保持整洁和易于管理。 要批量删除本地…

没有用的小技巧之---接入网线,有内网没有外网,但是可以登录微信

打开控制面板&#xff0c;找到网络和Internet 选择Internet选项 点击连接&#xff0c;选择局域网设置 取消勾选代理服务器

开放式耳机会打扰到别人吗?四款漏音处理做的好的蓝牙耳机

一般情况下&#xff0c;开放式耳机不会打扰到别人。 开放式耳机通常采用全开放设计&#xff0c;声音不会完全封闭在耳朵里&#xff0c;而是向四周扩散&#xff0c;相比封闭式耳机&#xff0c;其对外界环境的噪音影响更小 。而且现在的开放式耳机在技术上已经有了很大的进步&am…

[数据集][目标检测]工程机械车辆检测数据集VOC+YOLO格式3189张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3189 标注数量(xml文件个数)&#xff1a;3189 标注数量(txt文件个数)&#xff1a;3189 标注…

springboot的自动配置和怎么做自动配置

目录 一、Condition 1、Condition的具体实现 2、Condition小结 &#xff08;1&#xff09;自定义条件 &#xff08;2&#xff09;SpringBoot 提供的常用条件注解 二、Enable注解 三、EnableAutoConfiguration 注解和自动配置 1、EnableAutoConfiguration的三个注解属性…

git 学习--GitHub Gitee码云 GitLab

1 集中式和分布式的区别 1.1 集中式 集中式VCS必须有一台电脑作为服务器&#xff0c;每台电脑都把代码提交到服务器上&#xff0c;再从服务器下载代码。如果网络出现问题或服务器宕机&#xff0c;系统就不能使用了。 1.2 分布式 分布式VCS没有中央服务器&#xff0c;每台电脑…

Python编码系列—Python SQL与NoSQL数据库交互:深入探索与实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

预警先行,弯道哨兵让行车更安全

预警先行&#xff0c;弯道哨兵让行车更安全”这句话深刻体现了现代交通安全理念中预防为主、科技赋能的重要性。在道路交通中&#xff0c;尤其是复杂多变的弯道区域&#xff0c;交通事故的发生率往往较高&#xff0c;因此&#xff0c;采取有效的预警措施和引入先进的交通辅助设…

怎么管控终端电脑上的移动端口

管控终端电脑上的移动端口&#xff0c;尤其是USB等移动端口&#xff0c;是确保企业数据安全和提升网络管理效率的重要手段。 一、使用注册表编辑器禁用USB端口&#xff08;适用于Windows系统&#xff09; 打开注册表编辑器&#xff1a; 同时按下“WinR”组合键&#xff0c;打…

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查&#xff0c;来检查自己的文章是不是负荷收录准测&#xff0c;如果页面有严重的错误&#xff0c;搜索引擎是不会进行收录的&#xff0c;而且还会判定文章为低质量文章&#xff01; 检查是否有问题。下面的页面就是有问题&#xff0c;当然如果是误报你也可…

Java并发类API——CompletionService

CompletionService 是 Java 中 java.util.concurrent 包的一部分&#xff0c;用于管理并发任务的执行&#xff0c;并以完成的顺序提供结果。它结合了线程池和阻塞队列的功能&#xff0c;用于提交任务并按照任务完成的顺序来检索结果&#xff0c;而不是按照任务提交的顺序。 接…

NC拼接所有的字符串产生字典序最小的字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一个长度…

单例模式(singleton)- python实现

通俗示例 想象一下&#xff0c;一个国家只有一个国王。不管你在哪里&#xff0c;提到这个国家的国王&#xff0c;大家都能知道是指同一个人。在程序设计中&#xff0c;单例模式就像是这样的国王&#xff0c;一个类只有一个实例&#xff0c;无论你多少次请求这个类的实例&#…

基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍爬虫数据概览HIve表设计Cars Database Tables1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distribu…

Midjourney进阶-反推与优化提示词(案例实操)

​ Midjourney中提示词是关键&#xff0c;掌握提示词的技巧直接决定了生成作品的质量。 当你看到一张不错的图片&#xff0c;想要让Midjourney生成类似的图片&#xff0c;却不知道如何描述画面撰写提示词&#xff0c;这时候Midjourney的/describe指令&#xff0c;正是帮助你推…

嵌入式AI快速入门课程-K510篇 (第四篇 AI概念及理论知识)

第四篇 AI概念及理论知识 文章目录 第四篇 AI概念及理论知识1.人工智能与机器学习1.1 机器学习1.2 模型和拟合1.3 线性回归模型1.3.1 实现简单线性回归1.3.2 简单线性回归代码解析1.3.3 Sklearn实现房价预测模型1.3.4 Sklearn房价预测代码解析 2.深度学习及神经网络2.1 深度学习…

Java | Leetcode Java题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {private class Node {// 哈希表存储关注人的 IdSet<Integer> followee;// 用链表存储 tweetIdLinkedList<Integer> tweet;Node() {followee new HashSet<Integer>();tweet new LinkedList<Integer&g…

多线程并发服务器

多线程并发服务器 服务端 #include <stdio.h> #include <string.h> #include <sys/errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <ctype.h> #include <p…

Nofollow不好吗?Follow和Nofollow的区别

Follow和Nofollow的区别 “follow”和“nofollow”是HTML中的两种属性&#xff0c;它们通常用于<a>标签&#xff0c;即超链接。这两种属性对搜索引擎优化&#xff08;SEO&#xff09;有重要的影响。 1.Follow链接&#xff08;Dofollow&#xff09;: 这是默认的链接属性…

带你玩转小程序推广,实现短链接一键跳转

不知道各位有没有想过&#xff0c;短链接直接跳转到微信小程序到底该怎么操作呢&#xff1f;掌握这个小技能&#xff0c;能让你的推广效率大幅提升哦。今天就给大家分享一个全新方法&#xff0c;教你如何从短链接直接跳转到微信小程序&#xff0c;实现高效的一键式跨越。 一、…