Python 基础语法:基本数据类型(集合)

1  集合(Set)的基本概念和特性

集合是一个无序的、不重复的元素序列。集合中的元素是唯一的,即集合中不会出现重复的元素。集合的主要作用是进行成员关系测试和消除重复元素。

集合的特性:

  • 无序:序列是有序的,但集合是无序的。
  • 唯一:集合中的元素是唯一的,即集合中不会出现重复的元素。

2  集合的创建

在Python中,可以使用大括号 {}set() 函数来创建集合。

# 使用大括号创建集合  
s1 = {1, 2, 3, 4, 5}  
print(s1)  # 输出:{1, 2, 3, 4, 5}  # 使用set()函数创建集合  
s2 = set([1, 2, 2, 3, 4, 4, 5])  
print(s2)  # 输出:{1, 2, 3, 4, 5},注意重复元素被自动去除

在上面的代码中,我们展示了如何使用大括号和 set() 函数来创建集合。

首先,大括号 {} 可以直接用来创建集合,并将多个元素放入集合中。

其次,set() 函数也可以用来创建集合,它可以接收一个可迭代对象(比如列表、元组等),并返回一个新集合。值得注意的是,集合会自动去除其中的重复元素,所以即使我们向 set() 函数传入了一个包含重复元素的列表,返回的集合中也只会包含不重复的元素。 

3  集合的基本操作

集合提供了一系列操作,比如添加元素、删除元素、交集、并集、差集等。这些操作使得集合在处理一些特定问题时非常有用,比如去重、成员检测等。

3.1  添加元素

在Python中,add() 方法用于向集合中添加一个元素。如果元素已经存在于集合中,add() 方法不会抛出错误,也不会改变集合,因为集合中的元素是唯一的。

下面是一个使用 add() 方法向集合中添加元素的例子:

# 创建一个空集合  
s = set()  # 使用 add() 方法添加元素  
s.add(1)  
s.add(2)  
s.add(3)  # 打印集合  
print(s)  # 输出:{1, 2, 3}  # 尝试添加已存在的元素  
s.add(2)  # 这个操作不会改变集合,因为2已经存在于集合中  # 再次打印集合  
print(s)  # 输出仍然是:{1, 2, 3}

在上面的代码中,我们首先创建了一个空集合 s。然后,我们使用 add() 方法向集合中添加了三个元素:1、2 和 3。当我们尝试再次添加已经存在于集合中的元素(比如2)时,add() 方法不会改变集合的内容。最后,我们打印集合以验证元素已经被成功添加。

需要注意的是,由于集合是无序的,所以每次打印集合时元素的顺序可能会有所不同,但这并不影响集合中元素的唯一性和存在性。

3.2  删除元素

在Python中,remove() 方法用于从集合中删除指定的元素。如果元素不存在于集合中,remove() 方法会抛出一个 KeyError 异常。因此,在使用 remove() 方法之前,通常需要先检查元素是否存在于集合中,或者使用 discard() 方法来安全地删除元素,discard() 方法在元素不存在时不会抛出异常。

下面是使用 remove() 方法从集合中删除元素的例子:

# 创建一个集合  
s = {1, 2, 3, 4}  # 使用 remove() 方法删除元素  
s.remove(3)  # 打印集合  
print(s)  # 输出:{1, 2, 4},元素3已被删除  # 尝试删除不存在的元素(这会抛出 KeyError)  
# s.remove(5)  # 这行代码会抛出 KeyError,因为5不在集合中  # 更安全的做法是使用 discard() 方法  
# 它不会在元素不存在时抛出异常  
s.discard(5)  # 没有任何输出,因为5不在集合中,但也不会抛出异常  # 再次打印集合以确认状态  
print(s)  # 输出仍然是:{1, 2, 4}

在上面的代码中,我们首先创建了一个包含四个元素的集合 s。然后,我们使用 remove() 方法删除了元素 3。之后,我们尝试删除一个不存在的元素(比如 5),这会抛出一个 KeyError 异常。为了避免这种异常,我们可以使用 discard() 方法,它会在元素不存在时安全地什么都不做。最后,我们打印集合以确认元素已经被成功删除,并且没有因为尝试删除不存在的元素而引发异常。

3.3  交集

在Python中,可以使用 & 运算符或 intersection() 方法来计算两个集合的交集,即同时存在于两个集合中的元素。

以下是使用&运算符和intersection()方法计算两个集合交集的示例:

# 创建两个集合  
set1 = {1, 2, 3, 4, 5}  
set2 = {4, 5, 6, 7, 8}  # 使用 & 运算符计算交集  
intersection_using_and = set1 & set2  
print("使用 & 运算符计算的交集:", intersection_using_and)  # 输出:{4, 5}  # 使用 intersection() 方法计算交集  
intersection_using_method = set1.intersection(set2)  
print("使用 intersection() 方法计算的交集:", intersection_using_method)  # 输出:{4, 5}

3.4  并集

使用 | 运算符或 union() 方法计算两个集合的并集。

s1 = {1, 2, 3, 4}  
s2 = {3, 4, 5, 6}  
print(s1 | s2)  # 输出:{1, 2, 3, 4, 5, 6}  
print(s1.union(s2))  # 输出:{1, 2, 3, 4, 5, 6}

3.5  差集

使用 - 运算符或 difference() 方法计算两个集合的差集(属于第一个集合但不属于第二个集合的元素)。

s1 = {1, 2, 3, 4}  
s2 = {3, 4, 5, 6}  
print(s1 - s2)  # 输出:{1, 2}  
print(s1.difference(s2))  # 输出:{1, 2}

3.6  对称差集

使用 ^ 运算符或 symmetric_difference() 方法计算两个集合的对称差集(属于第一个集合或属于第二个集合,但不同时属于两者的元素)。

s1 = {1, 2, 3, 4}  
s2 = {3, 4, 5, 6}  
print(s1 ^ s2)  # 输出:{1, 2, 5, 6}  
print(s1.symmetric_difference(s2))  # 输出:{1, 2, 5, 6}

4  集合的常用方法

Python的集合(set)数据类型提供了很多有用的方法来执行各种操作。除了之前提到的add(), remove(), 交集运算等,isdisjoint()issubset() 也是集合中常用的方法。

isdisjoint() 方法用于判断两个集合是否无交集,即它们没有共同的元素。如果两个集合没有交集,则返回 True,否则返回 False

issubset() 方法(或 <= 运算符)用于判断一个集合是否是另一个集合的子集。如果是,则返回 True,否则返回 False

# 创建两个集合  
set1 = {1, 2, 3}  
set2 = {3, 4, 5}  
set3 = {1, 2, 3, 4, 5}  # 使用 isdisjoint() 方法判断集合是否无交集  
no_intersection = set1.isdisjoint(set2)  
print("set1 和 set2 是否无交集:", no_intersection)  # 输出:False,因为它们有共同的元素 3  # 使用 issubset() 方法判断集合是否是子集  
is_subset = set1.issubset(set3)  
print("set1 是否是 set3 的子集:", is_subset)  # 输出:True,因为 set1 中的所有元素都在 set3 中  # 也可以使用 <= 运算符来判断子集关系  
is_subset_operator = set1 <= set3  
print("使用 <= 运算符判断 set1 是否是 set3 的子集:", is_subset_operator)  # 输出:True

在这个例子中,set1set2 有一个共同的元素 3,所以它们不是无交集的,isdisjoint() 返回 False。而 set1 的所有元素都包含在 set3 中,所以 set1set3 的子集,issubset()<= 运算符都返回 True

这些方法在处理集合数据时非常有用,可以帮助我们快速判断集合之间的关系,从而进行进一步的操作或逻辑判断。

集合与其他数据类型的转换

集合还可以与其他数据类型进行转换。比如,我们可以使用 list() 函数将集合转换为列表,或者使用 tuple() 函数将集合转换为元组。这种转换在需要改变数据结构以适应不同场景时非常有用。

5.1  集合转列表

s = {1, 2, 3, 4}  
list_s = list(s)  
print(list_s)  # 输出:[1, 2, 3, 4]

5.2  集合转元组

s = {1, 2, 3, 4}  
tuple_s = tuple(s)  
print(tuple_s)  # 输出:(1, 2, 3, 4)

同样地,列表和元组也可以转换为集合,但需要注意的是,集合是无序的,所以转换后的集合元素的顺序可能与原列表或元组不同。

5.3  列表转集合

list_s = [1, 2, 2, 3, 4, 4]  
set_s = set(list_s)  
print(set_s)  # 输出:{1, 2, 3, 4},注意重复元素被去除

5.4  元组转集合

tuple_s = (1, 2, 3, 4)  
set_s = set(tuple_s)  
print(set_s)  # 输出:{1, 2, 3, 4}

集合在Python中是一个非常有用的数据类型,它提供了快速的成员检测功能,并且能自动去除重复元素。在处理一些需要快速判断元素是否存在的场景,或者需要去除重复元素的场景时,集合是一个非常好的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA L1-009 N个数求和(C++)

本题的要求很简单&#xff0c;就是求N个数字的和。麻烦的是&#xff0c;这些数字是以有理数分子/分母的形式给出的&#xff0c;你输出的和也必须是有理数的形式。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;。随后一行按格式a1/b1 a2/b2 …

DAY14二叉树迭代遍历

二叉树前序迭代法遍历 前序遍历是中左右&#xff0c;每次先处理的是中间节点&#xff0c;那么先将根节点放入栈中&#xff0c;然后将右孩子加入栈&#xff0c;再加入左孩子。 为什么要先加入 右孩子&#xff0c;再加入左孩子呢&#xff1f; 因为这样出栈的时候才是中左右的顺…

刷题日记——01字符串、非素数个数(厦门大学机试)

题目1——01字符串 分析 经过拆解找规律&#xff0c;发现是两个斐波那契 那么代码就好写了呀 #include <stdio.h>unsigned long long f(int n){if(n0||n1){return n;}return (f(n-1)f(n-2))%2333333; }int main(){int n;scanf("%d",&n);printf("%…

Python实战:Python内置数据类型

Python是一种广泛应用于各种领域的编程语言&#xff0c;其内置数据类型是Python编程的基础。本文将详细介绍Python内置数据类型&#xff0c;包括数字、字符串、列表、元组、字典和集合等&#xff0c;并通过具体代码示例来帮助读者更好地理解和应用这些数据类型。 1. 数字 Pyt…

2.Datax数据同步之Windows下,mysql和sqlserver之间的自定义sql文数据同步

目录 前言步骤操作大纲步骤明细mysql 至 sqlServersqlServer 至 mysql执行同步语句中报 前言 上一篇文章实现了不同的mysql数据库之间的数据同步&#xff0c;在此基础上本篇将实现mysql和sqlserver之间的自定义sql文数据同步 准备工作&#xff1a; JDK(1.8以上&#xff0c;推…

亲测抖音小程序备案流程,抖音小程序如何备案,抖音小程序备案所需准备资料

抖音小程序为什么要备案&#xff0c;抖音官方给出如下说明&#xff1a; 1、2024年3月15日后提交备案的小程序将不保证2024年3月31日前平台可初审通过&#xff1b; 2、2024年3月31日后未完成备案小程序将被下架处理。 一&#xff0c;备案前需准备资料 &#xff08;一&#xff0…

BUUCTF-----[SWPU2019]Web1

打开页面&#xff0c;原本以为是二次注入,结果不是&#xff0c;先注册一个账户 在申请发布广告中&#xff0c;发现反射性xss(然而没有什么用) 在广告申请名字中发现注入点 开始注入 通过一系列的测试&#xff0c;发现系统过滤了#&#xff0c;or&#xff0c;空格 orde…

《Fallacies of Distributed Systems》原文手译

Fallacies of Distributed Systems 分布式系统的谬误 Fallacies of distributed systems are a set of assertions made by L Peter Deutsch and others at Sun Microsystems describing false assumptions that programmers new to distributed applications invariably mak…

高性能 数据库连接池 HikariCP | 连接池大小配置误区

👀 上节回顾:上一节对 HikariCP 数据源的配置进行了详细了解。 👉 本节目标:关于连接池大小的设定,有一定的误区,必读。【没想到,有误区😂】 连接池越大越好?No!!! 有这样的场景:10000 个并发前端用户,每秒 2000 个事务执行,如何配置连接池的大小?配 200?配…

已解决org.apache.hadoop.hdfs.protocol.QuotaExceededException异常的正确解决方法,亲测有效!!!

已解决org.apache.hadoop.hdfs.protocol.QuotaExceededException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 总结 博主v&#xff1a;XiaoMing_Java 问题分析 在使用Hadoop分布式文件系统&a…

java中string类型常用的37个函数

java中string类型常用的37个函数—无极低码 int indexOf(int ch, int fromIndex) 、int indexOf(int ch) 、int indexOf(String str, int fromIndex) 、int indexOf(String str) 、int lastIndexOf(int ch, int fromIndex) 、int lastIndexOf(int ch) 、int lastIndexOf(Strin…

2063:【例1.4】牛吃牧草

时间限制: 1000 ms 内存限制: 65536 KB 提交数:104458 通过数: 64963 【题目描述】 有一个牧场&#xff0c;牧场上的牧草每天都在匀速生长&#xff0c;这片牧场可供15头牛吃20天&#xff0c;或可供20头牛吃10天&#xff0c;那么&#xff0c;这片牧场每天新生的草量…

26-4 SQL注入攻击 - 不同数据库系统利用dnslog姿势

环境准备:SQL注入攻击 - SQL注入无回显,盲注又被封怎么办?-CSDN博客 构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、MySQL 在 MySQL 数据库管理系统中,可以利用 load_file 函数来执行文件读取操作,并通过注入恶意代码来触发 DNS…

程序分享--排序算法--归并排序

关注我&#xff0c;持续分享逻辑思维&管理思维&#xff1b; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导&#xff1b; 有意找工作的同学&#xff0c;请参考博主的原创&#xff1a;《面试官心得--面试前应该如何准备》&#xff0c;《面试官心得--面试时如何进行自…

操作系统--LRU算法,手撕

今天研究一下LRU算法&#xff0c;上学期学数据结构的时候就应该学一下这个算法&#xff0c;不过后面操作系统也会讲到LRU算法 题目 LRU缓存leetocde146 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;算法是一种常见的缓存替换算法&#xff0c;通…

windows系统图标变白设置

我们在使用系统的时候&#xff0c;通常会在桌面创建图标&#xff0c;有时候桌面图标过多&#xff0c;整理图标放在新建文件夹的时候&#xff0c;图标变白&#xff0c;通常情况下都是缓存问题&#xff0c;这里也是删除缓存解决演示系统&#xff1a;windows11 1显示图标缓存目录 …

保护数字前沿:有效的威胁暴露管理

人工智能技术正在从根本上改变网络安全领域的方向。仅 2023 年&#xff0c;全球企业预计将在人工智能上花费 1027.8 亿美元&#xff0c;以阻止网络安全威胁。 人工智能 (AI)在增强网络安全措施方面发挥着关键作用&#xff0c;因为它能够快速分析大量数据并识别可能表明潜在威胁…

Unity 显示MeshRenderer的渲染层级

Unity 显示MeshRenderer的渲染层级 前言源码MeshRendererInspectorSkinnedMeshRendererInspector 参考 前言 Mesh Renderer和Skinned Mesh Renderer组件默认不显示Order&#xff0c;找了个工具显示一下。 源码 下面两个代码放入Editor文件夹中 MeshRendererInspector Me…

vue的导入

import { onMounted, onUpdated, onUnmounted } from ‘vue’; 单一导出&#xff08;不使用 {}&#xff09;&#xff1a;通常用于导入vue组件 当一个模块只导出一个内容时&#xff0c;可以直接导入&#xff0c;无需使用 {}。多个导出&#xff08;使用 {}&#xff09;&#xff…

代码随想录day34 Java版

416. 分割等和子集 我们的目标是尝试从这些数字中选取一部分数字&#xff0c;使得它们的和恰好等于数组总和的一半。这相当于在背包容量为总和的一半的情况下&#xff0c;尝试装入物品&#xff0c;看是否能够恰好装满背包。 class Solution {public boolean canPartition(int…