您的位置:首页 > 健康 > 养生 > 家装设计师工资高吗_网站后端开发软件_百度推广外推联系方式_代理公司注册

家装设计师工资高吗_网站后端开发软件_百度推广外推联系方式_代理公司注册

2024/10/5 18:29:23 来源:https://blog.csdn.net/zjw529507929/article/details/142112527  浏览:    关键词:家装设计师工资高吗_网站后端开发软件_百度推广外推联系方式_代理公司注册
家装设计师工资高吗_网站后端开发软件_百度推广外推联系方式_代理公司注册

[Python学习日记-19] 细讲数据类型——集合

简介

集合的创建

集合的增删查

集合的循环

集合的去重

集合的关系运算

简介

        在前面我们学习到了列表、元组、字符串、字典这几种数据类型,在 Python 中还有最后一种数据类型,那就是集合,下面我们一起来看一下这种数据类型究竟是怎么回事吧

定义:集合跟我们学的列表有点像,也是可以存一堆数据,其是一种无序、可变且不重复的数据类型,不过它有几个独特的特点,令其在整个 Python 中占有一席之地

特性:

  1. 里面的元素不可变,代表你不能存一个 list、dict 在集合里,而字符串、数字、元组等不可变类型可以存
  2. 天生去重,在集合里没办法存重复的元素
  3. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,例如集合 {3,4,5} 和 {3,5,4} 算作同一个集合

        基于上面的特性,我们可以用集合来干2件事,一是去重,二是关系运算

集合的创建

        下面我们先来学习一下集合是如何创建的,前面提到集合是没办法存重复的元素的,那我们通过代码来验证一下是否如此,代码如下

a = {1,2,3,4,2,"Jove",3,"rain","Jove"}
print(a)

 代码输出如下: 

         由于它是天生去重的,重复的值根本存不进去

集合的增删查

        在 Python 中,集合内存储的都是一些不可变的数据类型,例如字符串、数字、元组等,但是集合本身是一种可变的数据类型,可以执行增加、删除、修改和查询操作。

一、增

a = {1, 2, 3, 4, "rain", "Jove"}
a.add("Kerry")
a.add("Jove")    # 加入了重复的元素不会有返回提示
a.add([1,2,3])    # 加入可变类型将会报错 ——> unhashable type (该类型无法被 hash)

代码输出如下: 

 

        从上面的代码输出可以看出集合是无序的,它并不像列表一样可以指定加载前面或者后面,位置完全随机,下面我们再加入一个“Kerry1”看看它这次又加到了那里了

        这次又加到了中间位置,从现象可以看出集合真的是一个无序的数据集合 

二、删

1、指定删除(discard)

a = {1, 2, 3, 4, "rain", "Jove"}
a.discard("rain")    # 删除一个存在的值
a.discard("rain2")    # 如果这个值不存在将不会有任何操作

 代码输出如下:

 

2、指定删除(remove)

a = {1, 2, 3, 4, "rain", "Jove"}
a.remove("rain")    # 删除一个存在的值和 discard() 相同
a.remove("rain2")    # 与 discard() 不同的是,如果这个值不存在将会报错

代码输出如下:

 

3、随机删除(少用或特定场景使用)

a = {1, 2, 3, 4, "rain", "Jove"}
a.pop()    # 删除并返回

代码输出如下: 

        在你实际操作时你会发现,它不是按顺序删的吗?其实不然,现在只不过是你数据量太少,当数据量上万或者几十万是它就是随机删的了 

4、清空

a = {1, 2, 3, 4, "rain", "Jove"}
a.clear()

代码输出如下:  

三、查

a = {1, 2, 3, 4, "rain", "Jove"}
print("Jove" in a)

 代码输出如下:

注意:集合的切片也是不允许的,如果强行切片会报错 

集合的循环

        集合的循环和列表是一致的,如果熟悉列表的操作这个应该是得心应手的

a = {1, 2, 3, 4, "rain", "Jove"}
for i in a:print(i)

  代码输出如下:

 

集合的去重

        帮列表去重最快速的办法是什么?就是把它转成集合,去重完,再转回列表来实现。代码如下

a = [1,2,3,4,2,"Jove",3,"rain","Jove"]
a = list(set(a))    # set() 就是将列表 a 强制转换为集合,一句代码搞定

 代码输出如下: 

集合的关系运算

         我们来举个例子,有两门课程,一门是 py 另一门是 web,有的学生及学了 py 又学了 web 那我们怎么才可以把及学了 py 又学了 web 的学生都取出来呢?我们先看列表是如何实现的

py = ["张三","李四","王五","吴六","Jove","Kerry","Lucy"]
web = ["Jove","Mary","张飞","李四","Jack"]both = []
for i in py:if i in web:both.append(i)print(both)

代码输出如下:  

 

        可以看得出使用列表来实现相对复杂,而且要遍历两个列表,如果列表数据有上万条那么多那这个遍历过程将会相当漫长。其实关系运算有四种形式:交集、并集、差集、对称差集,而上面的就是交集,下面我们来看看集合是如何实现这四种形式的

一、集合的交集、并集、差集、对称差集

1、交集

        交集只会把两个集合中都有的元素显示出来

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py & web)    # 交集,elements in both set
print(py.intersection(web))
print(py.intersection_update(web))    # 把结果赋值给 py

代码输出如下: 

        可以看得出使用集合来实现交集比用列表来实现简单高效得多

2、并集(合集) 

        并集会把两个集合加在一起,有多项相同的元素将会只留下一个

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py | web)    # 并集 or 合集
print(py.union(web))
print(py.update(web))    # 把结果赋值给 py

代码输出如下: 

3、差集

        差集会以前面一项为主显示

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py - web)    # 差集,only in py
print(py.difference(web))
print(py.difference_update(web))    # 把结果赋值给 py
print(web - py)    # 差集,only in web
print(web.difference(py))
print(web.difference_update(py))    # 把结果赋值给 web

代码输出如下: 

 

4、对称差集

        对称差集会把两个集合里面都有的元素剔除掉

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py ^ web)    # 对称差集,把脚踏2只船的人踢出去
print(py.symmetric_difference(web))
print(py.symmetric_difference_update(web))    # 把结果赋值给 py

代码输出如下:  

二、集合的关系判断

        两个集合之间一般有三种关系,相交、包含、不相交

1、相交

        相交是2个集合有相同的元素即为相交,否则为不相交 

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py.isdisjoint(web))    # 判断2个集合是不是不相交,返回 True 或 False

代码输出如下:  

2、包含

         包含是1个集合有另1个集合的全部元素

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py.issubset(web))    # 判断 py 是不是 web 的子集,返回 True 或 False

 代码输出如下:  

3、不相交

        不相交是2个集合没有1个元素相同 

py = {"张三","李四","王五","吴六","Jove","Kerry","Lucy"}
web = {"Jove","Mary","张飞","李四","Jack"}print(py.issuperset(web))    # 判断 py 是不是 web 的父集,返回 True 或 False

  代码输出如下:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com