3-3、python中内置数据类型(集合和字典)

news2025/1/18 8:53:30

文章目录

  • 集合
    • 集合的创建
    • 集合的特性
    • 集合的常用操作
      • 增加
      • 删除
      • 查看
  • 练习-对集合的排序
  • frozenset 不可变的集合
  • 字典
    • 字典的创建
    • 字典的特性
    • 字典的常用方法
      • 查看
      • 增加和修改
      • 删除
      • 遍历字典 (for)
  • defaultdict默认字典(给字典设置默认值)
  • 内置数据类型总结

集合

集合是一个无序 的、不重复元素序列

集合的创建

使用 { } 或者 set() 函数来创建集合

  • 注意:创建一个空集合必须使用 set()函数
  • { } 用于创建一个空字典
  • 集合的元素必须是不可变数据类型
s = {1, 2, 3, 1, 2, 3}
print(s, type(s))  # {1, 2, 3} <class 'set'>
# s={1,2,3,[1,2,3]} 会报错,集合中的元素只能是不可变数据类型
s = {}
print(s, type(s))  # {} <class 'dict'>
s = set()
print(s, type(s))  # 空集合set() <class 'set'>

在这里插入图片描述

集合的特性

集合是无序且不重复的,所以集合不支持连接、重复、索引、切片
集合支持成员操作符 in 和 not in

s = {1, 2, 3}
# print(s+s) #报错, 集合不支持连接操作符
# print(s*3) #报错, 集合不支持重复操作符
print(1 in s)

在这里插入图片描述

集合的常用操作

增加

s={1,2,3}
s.add(100) #添加单个元素
print(s)  #{1, 2, 3, 100}
s={1,2,3}
s.update('456') #添加多个元素
print(s)
s.update({7,8,9})
print(s)

在这里插入图片描述

删除

  • remove函数,如果删除的元素存在就删除,如果元素不存在就报错
  • discard函数,如果删除的元素存在就删除,如果元素不存在就do nothing
  • pop函数,随机删除一个元素,如果集合为空,就报错
s = {1, 2, 3}
s.remove(3)
print(s)
s = {1, 2, 3}
s.discard(100)  # 删除一个集合中不存在的元素,则啥也不做
print(s)
s = {1, 23, 4, 7, 8}
s.pop()
print(s)

在这里插入图片描述

查看

  • 差集:s1 - s2 (所有属于集合s1,但是不属于s2的元素)
  • 交集:s1 & s2
  • 对称差分:s1 ^ s2
  • 并集:s1 | s2
s1 = {1, 2, 3}
s2 = {1, 2}
print(s1 - s2)  # 差集{3}
print(s1 & s2)  # 交集{1, 2}
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print(s1 | s2)  # 并集 {1, 2, 3, 4}
print(s1 ^ s2)  # 对称差分  {1, 4},即{1, 2, 3, 4} - {2,3}

在这里插入图片描述

  • issubset函数,s1.issubset(s2),判断s2是不是s1的子集
  • isdisjoint函数,s1.isdisjoint(s2),判断s1和s2是否没有交集
s1={1,2,3}
s2={2,3,4}
print(s1.issubset(s2)) # False s2是s1的子集吗?
print(s1.isdisjoint(s2)) # False s2和s1没有交集吗?

在这里插入图片描述

练习-对集合的排序

排序函数:
s={2,88,23,4}
sorted(s)函数能对集合s排序

明明想在学校中请一些同学做一项调查问卷。为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N小于等于1000),对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数字对应着不同学生的学号。然后再把这些数从大到小排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

import random
s = set()  # 定义一个空集合
n=int(input("请输入需要的N的个数(1-1000):"))
for i in range(n):
    num = random.randint(1, 1000)
    s.add(num)
print(sorted(s, reverse=True))

在这里插入图片描述

frozenset 不可变的集合

s = frozenset({1, 2, 3})
print(s, type(s))

frozenset是不能添加、删除、修改的集合

字典

字典是另一种可变容器模型,且可存储任意类型对象 【键不重复、无序】
键一般是唯一的,如果重复,最后一个键值会替换前面的,值不需要唯一
通过关键字,能快速找到关键字对应的值

字典的创建

字典是key-value对或键值对存储的

d={"name":"lee","age":"18","city":"西安"}
print(d,type(d))
d={}  # 创建一个空字典
print(d,type(d)) 

在这里插入图片描述

字典的特性

字典是不重复且无序的,和集合很像 【键不能重复,值可以重复】
字典不支持连接、重复、索引和切片特性
字典支持成员操作符 in 和 not in (判断是不是所有key值的成员)

d = {"name": "lee", "age": "18", "city": "西安"}
print("name" in d)  # True
print("wang" in d)  # false

在这里插入图片描述

字典的常用方法

查看

dir={"name":"lee","age":"18","city":"西安"}
print(dir.keys()) #查看字典的所有key
print(dir.values()) #查看字典的所有value
print(dir.items()) #查看字典的所有key-value(item)
print(dir['name']) #查看key为name对应的value值
#print(dir['province']) #查看key为province对应的value值,如果存在就返回,如果不存在就会报错
print(dir.get('province')) #查看key为province对应的value值,如果存在就返回,如果不存在就返回none
print(dir.get('province',"陕西")) 
#查看key为province对应的value值,如果存在就返回,如果不存在就返回陕西

在这里插入图片描述

增加和修改

d={"name":"lee","age":"18"}
d['city']='西安' #key值不存在就添加
print(d)
d['city']='北京' #key值存在,则修改相应value值
print(d)

d={"name":"lee","age":"18"}
d.setdefault('city','西安') #key值不存在就添加
print(d)
d.setdefault('city','北京') #key值存在,则do nothing
print(d)

在这里插入图片描述

删除

d = {"name": "lee", "age": 18}
d.pop('age')
print(d)

d = {"name": "lee", "age": 18}
del d['name']
print(d)

在这里插入图片描述

遍历字典 (for)

d = {"name": "lee", "age": 18, "city": "上海"}
for i in d:
    print(i)  # 这样只是遍历了字典中的key值
    
# 怎么样遍历字典中的key和value值呢?
for item in d.items():  # item中返回的是个列表:[('name', 'lee'), ('age', '18'), ('city', '西安')]
    print(item)  # 遍历字典中的key和value值
    
# 如何分别遍历字典中的key和value值呢?
for key, value in d.items():
    print(f"key={key},value={value}")

在这里插入图片描述

defaultdict默认字典(给字典设置默认值)

collections.defaultdict类,本身提供了默认值的功能,默认值可以是整型、列表、集合等

from collections import defaultdict
# 默认字典,设置字典默认的value值
d=defaultdict(int) #设置默认value为整型
print(d['views']) #默认value值为0
d['transfer'] +=1 #将key为transfer的值加1
print(d)

#默认值为列表
d=defaultdict(list)
d['allow_users'].append('lee')
d['deny_users'].extend(['user1','user2'])
print(d)

#默认值为集合
d=defaultdict(set)
d['love_movies'].add('肖申克的救赎')
d['love_movies'].update({'我不是药神','黑客帝国'})
print(d)

在这里插入图片描述

内置数据类型总结

  • 可变数据类型和不可变熟虑类型
    可变数据类型:列表、集合、字典
    不可变数据类型:数值类型、元组、字符串

  • 序列(支持for循环)和非序列(不支持for循环)
    有序序列拥有的特征:索引、切片、连接操作符、重复操作符、成员操作符
    在这里插入图片描述

什么是可变数据类型:
可以增删改。可变数据类型允许变量的值发生变化,即如果对变量进行append、+ - 等操作,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化。不过对于相同的值的不用对象,再内存中则会存在不用的对象,即每个对象都有自己的地址,相当于内存中对同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
什么是不可变数据类型:
不能增删改。 python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,就相当于是新建了一个对象。 而对于相同值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。

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

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

相关文章

echarts+vue实现柱状图分页显示

非常感谢这篇博客&#xff1a;ECharts柱状图分页显示&#xff08;数据循环&#xff09;_s小布丁的博客-CSDN博客 大家好&#xff0c;我是南宫&#xff0c;很久没有更新博客了。 本文参考了这篇博客里面的思路和分割数据的代码&#xff0c;不过我用的是vue页面&#xff0c;后面…

【Kubernetes系列】工作负载资源之Deployment

文章目录概述Deployment用例创建 DeploymentDeployment 状态更新 Deployment回滚 DeploymentDeployment 规约Pod 模板副本选择算符策略进度期限秒数最短就绪时间修订历史限制paused&#xff08;暂停的&#xff09;概述 Deployment 很适合用来管理你的集群上的无状态应用&#…

数据结构--不定长顺序表

1.不定长顺序表 与定长顺序表相比不定长顺序表的区别在于我们可以通过扩容来进行增添元素的存储单元。 2.结构 是对定长顺序表的一种改进&#xff0c;在初始时开辟内存被利用完后&#xff0c;还要继续插入数据时&#xff0c;这时候据需要扩容。故顺序表的结构设计就要发生变…

BHQ-1羧酸是一种黑暗淬灭剂BHQ-1 acid,1190431-95-8

英文名称&#xff1a;BHQ-1 acid 中文名称&#xff1a;BHQ-1酸 丁酸&#xff0c;4-[[4-[2-[2-甲氧基-5-甲基-4-[2-&#xff08;4-甲基-2-硝基苯基&#xff09;二氮基]苯基]二氮基]苯基]甲氨基]- 分子量&#xff1a;504.55 化学式&#xff1a;C26H28N6O5 CAS&#xff1a;119…

8. 微服务之消息队列RabbitMQ以及五种消息队列模式

8.1 同步调用 即客户端向服务端请求做数据处理&#xff0c;客户端需要一直等待服务端处理直到返回结果给客户端 同步调用存在的问题&#xff1a; 耦合度高&#xff1a;每次加入新的需求&#xff0c;都要修改原来的代码性能下降&#xff1a;调用者需要等待服务提供者响应&…

C++模拟OpenGL库——图形学状态机接口封装(二):基于状态机接口的画线画三角形

目录 画线操作 画三角形操作 按区间取点来进行绘制 加入纹理 画线操作 上次我们定义了一系列状态机接口&#xff0c;并遗留了&#xff1a; void Canvas::gtDrawArray(DRAW_MODE _mode, int _first, int _count) 没有去实现&#xff0c;这次对他进行一个实现&#xff0c;…

计算机网络-传输层(TCP协议特点和TCP报文段格式,TCP连接管理)

文章目录1. TCP协议特点&#xff0c;报文段格式2. TCP连接管理1. TCP协议特点&#xff0c;报文段格式 TCP是面向连接&#xff08;虚连接&#xff09;的传输层协议每一条TCP连接只能有两个端点&#xff0c;每一条TCP连接只能是点对点的。TCP提供可靠交付的服务&#xff0c;无差…

代码随想录61——额外题目【数组】:1365有多少小于当前数字的数字、941有效的山脉数组、1207独一无二的出现次数

文章目录1.1365有多少小于当前数字的数字1.1.题目1.2.解答2.941有效的山脉数组2.1.题目2.2.解答3.1207独一无二的出现次数3.1.题目3.2.解答1.1365有多少小于当前数字的数字 参考&#xff1a;代码随想录&#xff0c;1365有多少小于当前数字的数字&#xff1b;力扣题目链接 1.1…

MySQl(六):日志

Mysql&#xff1a;日志日志错误日志二进制日志查询日志慢查询日志事务日志日志 错误日志 Linux 实时查看尾部内容 创建一个错误&#xff0c;进入log去看 二进制日志 查询日志 慢查询日志 事务日志 数据库都具有事务日志&#xff0c;用于记录所有事务以及每个事务对数据库所做…

IAST技术进阶系列(五):共生进化,自适应云原生

伴随着云计算带来的基础设施变革以及应用技术架构的转变&#xff0c;云原生和云原生应用已经成为耳熟能详的词汇。Gartner预测&#xff0c;到2025年&#xff0c;云原生平台将成为95%以上新数字化计划的基础。伴随云原生场景的普及&#xff0c;云原生应用将引领下一个应用时代&a…

day2【代码随想录】移除元素

文章目录一、移除数据元素1、暴力求解2、双指针法3、相向双指针法二、删除有序数组中的重复项三、删除有序数组中的重复项II四、移动零一、移除数据元素 一个数组 nums 和一个值 val&#xff0c;需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不…

GitHub热榜 这份《亿级流量并发手册》彻底揭开阿里高流量的秘密

我们知道&#xff0c;高并发代表着大流量&#xff0c;高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案&#xff0c;从而抵抗巨大流量的冲击&#xff0c;带给用户更好的使用体验。这些方案好似能操纵流量&#xff0c;让流量更加平稳得被系统中的服务和组件…

从零开始学前端:DOM、BOM、焦点事件、键盘事件 --- 今天你学习了吗?(JS:Day20)

从零开始学前端&#xff1a;程序猿小白也可以完全掌握&#xff01;—今天你学习了吗&#xff1f;&#xff08;JS&#xff09; 复习&#xff1a;从零开始学前端&#xff1a;CSSOM视图模式 — 今天你学习了吗&#xff1f;&#xff08;JS&#xff1a;Day19&#xff09; 文章目录从…

一致性哈希算法【图解理论 + 代码实现】

一致性哈希算法&#x1f4d6;1. 普通哈希算法存在的问题&#x1f4d6;2. 一致性哈希算法概念&#x1f4d6;3. 代码实现&#x1f4d6;1. 普通哈希算法存在的问题 在介绍一致性哈希算法前&#xff0c;我们先来看两个场景&#xff1a; 场景一&#xff1a; 现在&#xff0c;假如有…

liunx 磁盘分区格式报错问题及挂载步骤

磁盘分区 1.lsblk查看未分区空间 2.执行fdisk /dev/vda进行分区 3.n(小写n开始分区)-&#xff08;顺序&#xff0c;可以默认顺序&#xff09;-&#xff08;分区的多少&#xff0c;默认是剩下所有&#xff09;-&#xff08;分区大小&#xff0c;默认是G&#xff09;-w&#xf…

WebRTC系列 -- iOS 音频采集之 ADM、APM和AudioState

文章目录 1. adm和apm1.1 adm类关系简介1.2 adm及apm的创建2. AudoState在WebRTC的音频模块有三个比较重要的模块,ADM、APM和AudioState,其中ADM是audio device model 也就是负责处理音频采集和播放数据的模块,APM是Audio Processing model ,AudioState主要是为了处理多个c…

十六、Lua 文件 I/O的学习

Lua 文件 I/O Lua I/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件相关的操作。完全模式&#xff08;complete …

公众号免费查题接口调用

公众号免费查题接口调用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

行业安全解决方案|腾讯游戏安全一站式防护,助力对抗外挂和DDoS攻击

近年来&#xff0c;在技术革新、监管加强、用户需求提升的三重作用下&#xff0c;游戏行业进入发展转型期&#xff0c;并涌现出游戏精品化、产业跨界升级、游戏出海三大趋势。随着游戏行业的繁荣&#xff0c;游戏厂商面临越来越多的黑灰产攻击、内容违规等游戏安全难题&#xf…

使用python画柱状图(matplotlib.pyplot)-- 你想要的设置这张图基本都包括

本人写论文时画的图&#xff0c;总结一下方法&#xff1a; 安心看下去&#xff0c;你应该就可以画出一个好看的柱状图&#xff0c;基本上需要的设置都有哦&#xff01;&#xff01;&#xff01; 目录 1 首先引入画图所需要的包Matplotlib 2 Matplotlib Pyplot 3 画柱状图 …