python之数据结构与算法(数据结构篇)-- 集合

一、集合的概念

所谓的编程中的”集合“,其实和高中数学中集合是一样的的。比如:羊村和狼堡看作一个集合,而狼堡中的"灰太狼"、"红太狼"、"小灰灰"则可看作狼堡中的元素,同理,羊村中的"喜羊羊", "美羊羊", "沸羊羊", "懒羊羊", "暖羊羊", "慢羊羊"。集合就是元素的集合体。就这样,我们基本上可以理解是个什么东东了!!!


二、集合实现思路

1.创建两个集合,一个包含羊村的成员,另一个包含狼堡成员

# 创建两个集合,一个包含羊村的成员,另一个包含狼堡成员
sheep_village = {"喜羊羊", "美羊羊", "沸羊羊", "懒羊羊", "暖羊羊", "慢羊羊"}
wolf_village = {"灰太狼", "红太狼", "小灰灰"}

2.打印原始集合

# 打印原始集合
print("羊村成员:", sheep_village)
print("狼堡:", wolf_village)

3.并集: 包含所有在羊村或狼堡的成员

# 并集: 包含所有在羊村或狼堡的成员
union_set = sheep_village.union(wolf_village)
print("并集 (羊村和灰太狼的朋友圈):", union_set)

4.交集: 同时存在于羊村和狼堡的成员

# 交集: 同时存在于羊村和狼堡的成员
intersection_set = sheep_village.intersection(wolf_village)
print("交集 (既是羊村成员又是灰太狼朋友的角色):", intersection_set)

5.差集: 在羊村但不在狼堡的角色

# 差集: 在羊村但不在狼堡的角色
difference_sheep = sheep_village.difference(wolf_village)
print("差集 (只属于羊村的角色):", difference_sheep)

6.检查特定角色是否在集合中

# 检查特定角色是否在集合中
print("喜羊羊在羊村吗?", "喜羊羊" in sheep_village)
print("灰太狼在羊村吗?", "灰太狼" not in sheep_village)

三、python代码实现

# 创建两个集合,一个包含羊村的成员,另一个包含狼堡成员
sheep_village = {"喜羊羊", "美羊羊", "沸羊羊", "懒羊羊", "暖羊羊", "慢羊羊"}
wolf_village = {"灰太狼", "红太狼", "小灰灰"}

# 打印原始集合
print("羊村成员:", sheep_village)
print("灰太狼和他的朋友们:", wolf_village)

# 并集: 包含所有在羊村或灰太狼朋友圈中的角色
union_set = sheep_village.union(wolf_village)
print("并集 (羊村和灰太狼的朋友圈):", union_set)

# 交集: 同时存在于羊村和狼堡的成员
intersection_set = sheep_village.intersection(wolf_village)
print("交集 (既是羊村成员又是灰太狼朋友的角色):", intersection_set)

# 差集: 在羊村但不在狼堡的角色
difference_sheep = sheep_village.difference(wolf_village)
print("差集 (只属于羊村的角色):", difference_sheep)

# 检查特定角色是否在集合中
print("喜羊羊在羊村吗?", "喜羊羊" in sheep_village)
print("灰太狼在羊村吗?", "灰太狼" not in sheep_village)

四、HYTML可视化实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>羊村与灰太狼的角色集合</title>
<style>
  body {
    font-family: Arial, sans-serif;
    margin: 20px;
    text-align: center;
  }
  .container {
    display: flex;
    justify-content: space-around;
    margin-top: 20px;
  }
  .set, .result {
    border: 2px solid #ccc;
    padding: 15px;
    width: 30%;
    min-width: 200px;
    text-align: left;
    background-color: #f9f9f9;
    transition: transform 0.3s ease;
  }
  .set h3, .result h3 {
    margin: 0 0 10px;
    cursor: pointer;
  }
  .character {
    display: block;
    margin: 5px 0;
  }
  .controls {
    margin-top: 20px;
  }
  button {
    margin: 0 10px;
    padding: 10px 20px;
    font-size: 16px;
    cursor: pointer;
  }
  .hidden {
    display: none;
  }
</style>
</head>
<body>
<h1>羊村与灰太狼的角色集合</h1>

<div class="container">
  <div class="set" id="sheepVillage">
    <h3 onclick="toggleSet('sheepVillage')">羊村成员</h3>
    <div class="character">喜羊羊</div>
    <div class="character">美羊羊</div>
    <div class="character">沸羊羊</div>
    <div class="character">懒羊羊</div>
    <div class="character">暖羊羊</div>
  </div>
  
  <div class="set" id="grayWolfFriends">
    <h3 onclick="toggleSet('grayWolfFriends')">灰太狼和他的朋友们</h3>
    <div class="character">灰太狼</div>
    <div class="character">红太狼</div>
    <div class="character">小灰灰</div>
    <div class="character">喜羊羊</div>
  </div>
</div>

<div class="result hidden" id="unionResult">
  <h3 onclick="toggleResult('unionResult')">并集 (羊村和灰太狼的朋友圈)</h3>
</div>

<div class="result hidden" id="intersectionResult">
  <h3 onclick="toggleResult('intersectionResult')">交集 (既是羊村成员又是灰太狼朋友的角色)</h3>
</div>

<div class="result hidden" id="differenceResult">
  <h3 onclick="toggleResult('differenceResult')">差集 (只属于羊村的角色)</h3>
</div>

<div class="result hidden" id="symmetricDifferenceResult">
  <h3 onclick="toggleResult('symmetricDifferenceResult')">对称差集 (不同时属于两边的角色)</h3>
</div>

<div class="controls">
  <button onclick="showUnion()">显示并集</button>
  <button onclick="showIntersection()">显示交集</button>
  <button onclick="showDifference()">显示差集</button>
  <button onclick="showSymmetricDifference()">显示对称差集</button>
</div>

<script>
const sheepVillage = new Set(["喜羊羊", "美羊羊", "沸羊羊", "懒羊羊", "暖羊羊"]);
const grayWolfFriends = new Set(["灰太狼", "红太狼", "小灰灰", "喜羊羊"]);

function showUnion() {
  const union = new Set([...sheepVillage, ...grayWolfFriends]);
  updateResult("unionResult", Array.from(union));
}

function showIntersection() {
  const intersection = new Set([...sheepVillage].filter(x => grayWolfFriends.has(x)));
  updateResult("intersectionResult", Array.from(intersection));
}

function showDifference() {
  const difference = new Set([...sheepVillage].filter(x => !grayWolfFriends.has(x)));
  updateResult("differenceResult", Array.from(difference));
}

function showSymmetricDifference() {
  const symmetricDifference = new Set(
    [...sheepVillage].filter(x => !grayWolfFriends.has(x))
      .concat([...grayWolfFriends].filter(x => !sheepVillage.has(x)))
  );
  updateResult("symmetricDifferenceResult", Array.from(symmetricDifference));
}

function updateResult(resultId, characters) {
  const resultDiv = document.getElementById(resultId);
  resultDiv.innerHTML = `<h3 onclick="toggleResult('${resultId}')">${resultDiv.querySelector('h3').innerText}</h3>`;
  characters.forEach(character => {
    resultDiv.innerHTML += `<div class="character">${character}</div>`;
  });
  toggleResult(resultId);
}

function toggleSet(setId) {
  const setDiv = document.getElementById(setId);
  setDiv.classList.toggle('hidden');
}

function toggleResult(resultId) {
  const resultDiv = document.getElementById(resultId);
  if (resultDiv.classList.contains('hidden')) {
    resultDiv.classList.remove('hidden');
    resultDiv.style.transform = 'scale(1.1)';
    setTimeout(() => { resultDiv.style.transform = 'scale(1)'; }, 300);
  } else {
    resultDiv.style.transform = 'scale(0.9)';
    setTimeout(() => { resultDiv.classList.add('hidden'); }, 300);
  }
}
</script>

</body>
</html>

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

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

相关文章

通过火山云API来实现:流式大模型语音对话

这里我们需要在火山云语音控制台开通大模型的流式语音对话、获取豆包模型的apiKey&#xff0c;开通语音合成项目。 这里使用的豆包模型是Doubao-lite&#xff0c;延迟会更低一些配置说明 这里一共有四个文件&#xff0c;分别是主要的fastAPI、LLM、STT、文件 TTS中需要配置 ap…

洛谷 U411986 数的范围(二分模板)

题意&#xff1a;在一个有序序列里面找某个值的初始出现下标和最后出现下标&#xff0c;如果该值不存在&#xff0c;输出-1 -1。 整数二分模板题&#xff0c;该题主要用来练习如何写两种情况下的二分函数的代码模板。 1&#xff09;upper_bound函数&#xff1a;用来寻找边界点A…

鸿蒙是必经之路

少了大嘴的发布会&#xff0c;老实讲有点让人昏昏入睡。关于技术本身的东西&#xff0c;放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一&#xff0c;其中很多人不太看好鸿蒙&#xff0c;一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点&#xff0c;我只扯扯…

香橙派5(RK3588)使用npu加速yolov5推理的部署过程

香橙派5使用npu加速yolov5推理的部署过程 硬件环境 部署过程 模型训练(x86主机) 在带nvidia显卡(最好)的主机上进行yolo的配置与训练, 获取最终的best.pt模型文件, 详见另一篇文档 模型转换(x86主机) 下载airockchip提供的yolov5(从pt到onnx) 一定要下这个版本的yolov5, …

【力扣 + 牛客 | SQL题 | 每日三题】大厂笔试真题W1,W4

1. 力扣603&#xff1a;连续空余的座位 1.1 题目&#xff1a; 表: Cinema ------------------- | Column Name | Type | ------------------- | seat_id | int | | free | bool | ------------------- Seat_id 是该表的自动递增主键列。 在 PostgreSQL 中&#…

练习LabVIEW第十九题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第十九题&#xff1a; 创建一个程序把另外一个VI的前面板显示在Picture控件中 开始编写&#xff1a; 在前面板放置一个二…

C语言教程——数组(2)

目录 系列文章目录 前言 4、数组作为函数参数 4.1冒泡函数的错误设计 4.2数组名是什么&#xff1f; 总结 前言 我们知道一维数组是连续存放的&#xff0c;随着数组下标的增长&#xff0c;地址是由低到高依次存放的&#xff0c;二维数组&#xff0c;也是在内存里面是连续存放的…

Linux | 配置docker环境时yum一直出错的解决方法

yum出错 Centos 7版本出错问题补充&#xff1a;什么是yumyum 和 apt 有什么区别&#xff1f; Centos 7版本 [rootlocalhost yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)出错问题 问题1 Could not retrieve mirrorlist http://mirrorlist.ce…

SQLite 3.47.0 发布,大量新功能来袭

SQLite 开发团队于 2024 年 10 月 21 日发布了 SQLite 3.47.0 版本&#xff0c;我们来了解一下新版本的改进功能。 触发器增强 SQLite 3.47.0 版本开始&#xff0c;触发器函数 RAISE() 的 error-message 参数可以支持任意 SQL 表达式。在此之前&#xff0c;该参数只能是字符串…

论1+2+3+4+... = -1/12 的不同算法

我们熟知自然数全加和&#xff0c; 推导过程如下&#xff0c; 这个解法并不难&#xff0c;非常容易看懂&#xff0c;但是并不容易真正理解。正负交错和无穷项计算&#xff0c;只需要保持方程的形态&#xff0c;就可以“预知”结果。但是这到底说的是什么意思&#xff1f;比如和…

Nodejs使用pkg打包为可执行文件

安装pkg npm install -g pkg查看pkg命令 pkg --help修改package.json 新增bin入口配置 {"name": "takescreenshot","version": "1.0.0","bin": "app.js", // 新增bin入口配置"scripts": {"t…

day10:ssh服务-跳板机

一&#xff0c;ssh服务概述 ssh服务概述 ssh&#xff08;Secure Shell&#xff09;是一种用于在不安全网络中进行安全登录、远程执行命令及传输文件的网络协议。它通过加密技术来保证通信的保密性和完整性&#xff0c;主要用于替代不安全的telnet、rlogin、rsh等协议。ssh通常…

计算机视觉-边缘检测实验报告

实验一 边缘检测实验 一、实验目的 1&#xff0e;理解并掌握 Sobel 算子和 Canny 算子的基本原理和应用。 2&#xff0e;学习如何在图像处理中使用这两种算子进行边缘检测。 3&#xff0e;比较 Sobel 算子和 Canny 算子的性能&#xff0c;了解各自的优缺点。 4&#xff0…

【mysql进阶】4-3. 页结构

页面结构 ⻚在MySQL运⾏的过程中起到了⾮常重要的作⽤&#xff0c;为了能发挥更好的性能&#xff0c;可以结合⾃⼰系统的业务场景和数据⼤⼩&#xff0c;对⻚相关的系统变量进⾏调整&#xff0c;⻚的⼤⼩就是⼀个⾮常重要的调整项。同时关于⻚的结构也要有所了解&#xff0c;以…

HTTP协议讲解

前瞻&#xff1a; 认识URL 1.ipport 2.平时上网&#xff0c;就是进程间通信 3.上网行为&#xff0c;1.获取资源 2.上传数据 相当于I/O 4.http协议采用tcp协议 网页 图片 音乐其实都是资源 Http请求 http request Method&#xff1a;Get/Post资源/路径&#xff1a…

MyBatis缓存详解(一级缓存、二级缓存、缓存查询顺序)

固态硬盘缺陷&#xff1a;无法长时间使用&#xff0c;而磁盘只要不消磁&#xff0c;只要不受到磁影响&#xff0c;就可以长期使用&#xff0c;因此绝大多数企业还是使用磁盘来存储数据 像mysql这种关系型数据库中的数据存储在磁盘中&#xff0c;为方便查询&#xff0c;减少系统…

Linux文件类型和根目录结构

Linux文件类型和根目录结构 1.文件类型 字符文件类型说明~普通文件类似于Windows的记事本d目录文件类似于windows文件夹c字符设备文件串行端口设备&#xff0c;顺序读写&#xff0c;键盘b块设备文件可供存储的接口设备&#xff0c;随机读写&#xff0c;硬盘p管道文件用于进程…

工程项目管理软件怎么选?推荐7款实用工具

本文提及的有主流7款工程项目管理系统软件有: 1. Worktile&#xff1b;2. 广联达BIM5D&#xff1b;3. 泛普软件&#xff1b;4. 明源云工程&#xff1b;5. 飞书&#xff1b;6. Smartsheet&#xff1b;7. Procore。 很多工程项目管理人员常常头疼如何有效地管理多个项目&#xff…

保研考研机试攻略:python笔记(1)

&#x1f428;&#x1f428;&#x1f428;宝子们好呀 ~ 我来更新欠大家的python笔记了&#xff0c;从这一篇开始我们来学下python&#xff0c;当然&#xff0c;如果只是想应对机试并且应试语言以C和C为主&#xff0c;那么大家对python了解一点就好&#xff0c;重点可以看高分篇…