Python的集合(set)类型、None类型.....

news2024/11/18 20:45:48

Day07 数据类型(下)

  • dict,字典类型,一个容器,元素必须是键值对

  • Set,集合类型,一个不允许重复&可变类型(元素可哈希)

  • float,浮点类型,常见的小数

    文章目录

    • 1.集合(set)
      • 1.1 集合的定义
      • 1.2 独有功能
        • 1.2.1 添加
        • 1.2.2 删除
        • 1.2.3 交集
        • 1.2.4 并集
        • 1.2.5 差集
      • 1.3 公共功能
        • 1.3.1 减,计算差集
        • 1.3.2 &,计算交集
        • 1.3.3 |,计算并集
        • 1.3.4 长度
        • 1.3.5 for 循环
      • 1.4 转换
      • 1.5 其他
        • 1.5.1 集合的存储原理
        • 1.5.2 元素必须可哈希
        • 1.5.3 查找速度特别快
        • 1.5.4 对比和嵌套
      • 练习题
        • 1. 写代码实现
        • 2.下面哪些值不能做集合的元素
        • 3.模拟用户信息录入程序,已录入则不再创建。
        • 4.给列表去重
    • None 类型

1.集合(set)

集合是一个无序、可变、不允许重复的容器

1.1 集合的定义

v = {1,2,3,"GG"}
  • 无序,无法通过索引获取元素值
  • 可变,可以添加和删除元素
v1 = {1,2,3,5}
v1.add(6)
print(v1)
#{1, 2, 3, 5, 6}
  • 不允许数据重复
v1 = {1,2,3,5}
v1.add(2)
print(v1)
#{1, 2, 3, 5}

一般什么时候用集合呢?

就是想要维护一大堆不重复的数据时,就可以用它。比如:做爬虫去网上找图片的链接,为了避免链接重复,可以选择用集合去存储链接地址。

  • 定义空集合时,只能使用v = set(),不能使用v={}(这样是定义一个空字典)

1.2 独有功能

1.2.1 添加

v1 = {1,2,3,5}
v1.add(2)
print(v1)
#{1, 2, 3, 5, 6}
data = set()
data.add("aa")
data.add(1)
data.add(456)
print(data)

#{456, 1, 'aa'}

1.2.2 删除

data = {"aa",456,1,"BB"}
data.remove("aa")
data.discard("BB")
print(data)

#{456, 1}

1.2.3 交集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 & d2  #取交集,方式一
d4 = d1.intersection(d2)#取交集,方式二
print(d3)

#{'BB', 'DD', 'GG'}

1.2.4 并集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 | d2#取并集,方式一
d4 = d1.union(d2) #取并集,方式二
print(d3)
#{'GG', 'BB', 'HH', 'CC', 'FF', 'DD', 'AA'}

1.2.5 差集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 - d2#d1中有d2中没有,方式一
print(d3)
{'CC', 'AA'}
d4 = d1.difference(d2)#d1中有d2中没有,方式二
print(d4)
{'CC', 'AA'}
d5 = d2 - d1#d2中有d1中没有,方式一
print(d5)
{'FF', 'HH'}
d6 = d2.difference(d1)#d2中有d1中没有,方式二
print(d6)
{'FF', 'HH'}

1.3 公共功能

1.3.1 减,计算差集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 - d2
d4 = d2 - d1
print(d3)
#{'CC', 'AA'}
#{'HH', 'FF'}

1.3.2 &,计算交集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 & d2 

1.3.3 |,计算并集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 | d2

1.3.4 长度

d1 = {"AA","BB","CC","DD","GG"}
print(len(d1))

1.3.5 for 循环

d1 = {"AA","BB","CC","DD","GG"}

for item in d1:
    print(item)

#AA
#BB
#GG
#DD
#CC

1.4 转换

  • 其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除。
  • int/list/tuple/dict都可以转换为集合类型。
v = "AA"
v1 = set(v)
print(v1)
v = [11,22,33,44,55,66]

v1 = set(v)
  • 集合也是去重的一个有效手段

1.5 其他

1.5.1 集合的存储原理

在这里插入图片描述

1.5.2 元素必须可哈希

  • 集合的元素必须是可哈希的值,内部通过通过哈希函数把值转换成一个数字。

  • 目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。

  • 转换成功

v = [11,22,33,44,55,66]

v1 = set(v)
  • 转换失败
li = [1,2,3,4,[1,2,3],44]

li1 = set(li)

#TypeError: unhashable type: 'list'

1.5.3 查找速度特别快

因存储原理特殊,集合的查找效率非常高(数据量大了才明显)

  • 效率低
user_list = ["AA", "BB", "GGBoy"]
if "BB" in user_list:
    print("在")
else:
    print("不在")

user_tuple = ("AA", "BB", "GGBoy")
if "GGBoy" in user_tuple:
    print("在")
else:
    print("不在")
  • 效率高
user_list = {"AA", "BB", "GGBoy"}
if "BB" in user_list:
    print("在")
else:
    print("不在")

1.5.4 对比和嵌套

类型是否可变是否有序元素要求是否可哈希转换定义空
listlist()v = []或v = list()
tupletuple()v = () 或 v = tuple()
set可哈希set()v = set()

练习题

1. 写代码实现

# 循环提示用户输入,如果输入值在v1中存在,则追加到v2中,如果v1中不存在,则添加到v1中。(如果输入x或n则停止循环)
v1 = {'AA', 'BB', 'CC'}
v2 = []

while True:
    name = input("请输入姓名:")
    if name in v1:
        v2.append(name)
    elif name.upper() == "N":

        print(v1)
        print(v2)
        print("ending")
        break
    else:
        v1.add(name)

2.下面哪些值不能做集合的元素


[11,22,33]#不能
[]#不能
(123)
(1,2,3)#不能

3.模拟用户信息录入程序,已录入则不再创建。

user_info_set = set()
while True:
    name = input("请输入姓名:")
    age = input("请输入年龄:")
    item = (name, age,)
    if item in user_info_set:
        print("该用户已录入")
    else:
        user_info_set.add(item)

4.给列表去重

v1 = [11,22,33,4,55,11,22,55,5,4]
v2 = set(v1)
print(v2)
#{33, 4, 5, 11, 22, 55}

None 类型

Python的数据类型中有一个特殊的值None,意味着这个值啥都不是或表示空。相当于其他语言中 nu11作用一样。在一定程度上可以帮助我们去节省内存。例如:

v1 = None
v3 = []
v4 = []

v3 = [11,22,33,44]
v4 = [111,22,43]

目前所有转可以换为False布尔值的值有:

0
""
[] or list()
() or tuple()
set()
None

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

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

相关文章

this和super的区别

0.定义区别this:是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 super:可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最 近的一个父类。…

docker镜像lasest具体是哪个版本

拿Nginx举例: 我们安装镜像Nginx时,假设使用的下面这样: docker pull nginx:latest 执行上面的命令后,最后得到:"Status: Downloaded newer image for nginx:latest" 已经下载最新的Nginx了。 那么问题来…

JUC并发编程之ArrayBlockingQueue的底层原理

作者简介:专注于研究Linux内核、Hotspot虚拟机、汇编语言、JDK源码、各大中间件源码等等喜欢的话,可以三连关注~ArrayBlockingQueue的介绍在JUC包下关于线程安全的队列实现有很多,那么此篇文章讲解ArrayBlockingQueue的实现原理。相对于Linke…

闲置vps出售流量赚钱

原理分析最近,一直在关注着vps赚钱这点事儿,今天就是填一下以前的坑。这里所说的出售流量,可能大家都听说过,把vps流量卖给别人获得一定的报酬。但是你要知道数据中心IP的流量是很便宜的,最贵的是住宅IP和移动流量。图…

别搜了!2023年PMP备考攻略全指南看这里就够了!

一、考试时间 PMP考试是一年四次的,一般在3月、6月、9月、12月份考试(考试时间一般为周六)。 所以如果有想法一定要在这个几个时间点之间备考准备哦。 二,报名流程 一般都是中英文两个官网都报名 1.英文报名 需要在PMI官方网…

Ubuntu救援模式emergency mode笔记

如果是磁盘自检出错,进入救援模式emergency mode,可以参考如下。chatgpt给出提示:如果Ubuntu磁盘自检出错,需要进入救援模式,可以以下步骤操作:在启动画面中,按下Shift键进入Grub菜单。选择「Ad…

Android精准开发——OKHTTP中拦截器原理及实现

1.前言 提到OKHttp大家都不陌生,OKHttp中的拦截器也在大家的项目中或多或少的被使用到,通常我们的使用是这样的 OkHttpClient client new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) .addNetworkInterceptor(new Token…

SpringBoot 整合 mybatis-generator 插件

SpringBoot 整合 mybatis-generator 插件 mybatis-generator 插件 mybatis 相关依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.1</version> &…

Java学习笔记——接口

目录接口的定义和特点JDK8版本中接口成员的特点——默认方法和静态方法JDK9版本中接口成员的特点——私有方法类和接口的关系接口的定义和特点 JDK8版本中接口成员的特点——默认方法和静态方法 JDK9版本中接口成员的特点——私有方法 类和接口的关系

JVM 基础 - JVM 内存结构

JVM 内存结构运行时数据区一、程序计数器&#xff08;线程私有&#xff09;二、虚拟机栈&#xff08;线程私有&#xff09;三、本地方法栈&#xff08;线程私有&#xff09;四、堆内存&#xff08;线程共享&#xff09;五、方法区&#xff08;线程共享&#xff09;运行时数据区…

【Git笔记】分支操作与合并分支(正常与冲突)

分支的操作 命令名称作用git branch 分支名创建分支git branch -v查看分支git checkout 分支名切换分支git merge 分支名把指定的分支合并到当前分支上 查看分支 创建分支 切换分支 合并分支&#xff08;正常合并&#xff09; 在 master 下&#xff0c;hello.txt 在 hot-fix …

[Spring Boot]11 使用@Cacheable注解实现Redis缓存

前言 为了方便讲解&#xff0c;模拟一个需要使用Redis缓存的场景&#xff0c;比如&#xff1a;一款APP的首页&#xff0c;由于其需要加载的数据量较大&#xff0c;于是决定把首页的部分数据使用Redis进行缓存&#xff0c;举例&#xff1a;比如要缓存首页的文章列表(ArticleLis…

Cartesi 2023 年 1 月回顾

2023 年1月 31日&#xff0c;准备迎接令人兴奋的一年&#xff0c;你做好准备了吗&#xff1f; 本月我们围绕游戏领域开展了很多推广活动。主持了我们的第二次游戏开发者社区电话会议&#xff0c; Cartesi 大使 Zach和Ultrachess 开发者 Jesse在 ATX Game Makers 的 game jam 上…

34k*16 薪,3年自动化测试历经3轮面试成功拿下华为Offer....

前言 转眼过去&#xff0c;距离读书的时候已经这么久了吗&#xff1f;&#xff0c;从18年5月本科毕业入职了一家小公司&#xff0c;到现在快4年了&#xff0c;前段时间社招想着找一个新的工作&#xff0c;前前后后花了一个多月的时间复习以及面试&#xff0c;前几天拿到了华为…

background-attachment属性值scroll、fixed和local的区别

首先看菜鸟教程中的解释&#xff1a; scroll&#xff1a;背景图片随着页面的滚动而滚动&#xff0c;默认值 fixed&#xff1a;背景图片不会随着页面的滚动而滚动 local&#xff1a;背景图片会随着元素的内容滚动而滚动 代码结合实例说明 先看代码&#xff1a; 主要包含两个盒子…

MyBatis(二)MyBatis入门程序

一、版本 软件版本&#xff1a; IntelliJ IDEA&#xff1a;2022.1.4Navicat for MySQL&#xff1a;16.0.14MySQL数据库&#xff1a;8.0.30 组件版本&#xff1a; MySQL驱动&#xff1a;8.0.30MyBatis&#xff1a;3.5.10JDK&#xff1a;Java17JUnit&#xff1a;4.13.2Logback…

实景三维模型道路中有很多破损车辆,有没有可以一键修除或去掉的办法?

在超大规模实景三维数据生产中&#xff0c;三维模型质量会受到移动物体这类客观因素的影响&#xff0c;常常造成道路模型严重扭曲以及纹理的错位。 1.三维场景重建中的移动车辆问题 车辆作为日常出行重要的交通工具&#xff0c;会出现在城市场景中的各个角落且不断移动。由于…

【方案】契约锁电子签章在50多个行业的详细应用场景

2022年&#xff0c;契约锁电子签章持续深入政府机关、集团、高校、医院、金融、工程、汽车、能源、食品、检测等各行业中大型组织&#xff0c;在与各类管理软件集成应用中&#xff0c;不断丰富签署场景&#xff0c;实现了300多种业务文件电子签署应用&#xff0c;持续助力组织数…

数据结构与算法:优先级队列(堆)

1.优先级队列 1.定义 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不…

【Rust】16. 智能指针

智能指针&#xff08;smart pointers&#xff09;是一类数据结构&#xff0c;他们的表现类似指针&#xff0c;但是也拥有额外的元数据和功能引用是一类只借用数据的指针&#xff1b;相反&#xff0c;在大部分情况下&#xff0c;智能指针拥有他们指向的数据 16.1 Box<T>&a…