人生苦短,我学python之数据类型(上)

news2024/11/21 2:27:51

个人主页:星纭-CSDN博客

系列文章专栏:Python

踏上取经路,比抵达灵山更重要!一起努力一起进步! 

目录

一.元组 (tuple)

二.集合(set)

 三.字典(dict)


一.元组 (tuple)

通过之前的学习我们了解了很多数据类型,比如整形(int),浮点数(float),字符串(str),列表(list)等等,接下来我们继续学习其他的数据类型。

student = ('20240506', '张三', '95')
print(student, type(student))  # 输出('20240506', '张三', '95') <class 'tuple'>

student的数据类型是元组,它与列表有所不同,列表是使用方括号定义的,元组是使用圆括号,并且使用逗号进行隔开。

观察以下代码:

a = (1, 2, 3, 1, 3, 1)
print(len(a))
print(a[1:3])
print(a.count(1))
print(4 in a)
print(max(a), min(a), sum(a))
print(a + a, a * 3)

输出结果:

('20240506', '张三', '95') <class 'tuple'>
6
(2, 3)
3
False
3 1 11
(1, 2, 3, 1, 3, 1, 1, 2, 3, 1, 3, 1) (1, 2, 3, 1, 3, 1, 1, 2, 3, 1, 3, 1, 1, 2, 3, 1, 3, 1) 

我们不难发现,以上对于元组的操作,对于列表也是成立的,二者一模一样。那么为啥还要有元组这样的数据类型呢?

其实元组也有不同于列表的性质。

注意一个细节:

a = (1)
print(type(a))  # 输出<class 'int'>

如果我们的元组只有一个元素,仅仅使用(1)这样的操作会让编译器理解为一个整数被括号括起来了,并不是元组,而且编译器会提示你使用括号括起整数这样的操作是毫无意义的。

并且提示你删除冗余的括号。

那么如果定义一个只有一个元素的元组呢? 

a = (1,)

只需要再添加一个逗号即可。

然后回到最开始的问题,元组和列表的区别在哪里?

元组和列表的主要区别在于元组是不可变的,而列表是可变的。

换句话说,元组(tuple)是只读的列表,这里的只读就代表不可更改。 

所谓只读,就是指一个元组被创建后,其元素是可以获取的,但是不能修改。

有人就会问了,那上面的切片操作如何解释呢?

注意:切片并不会导致 原始列表或者元组被修改,其只会创建一个新的列表或者元组。

所以对于元组来说,sort(),remove(),clear()函数都是不适用于元组的。

tuple()函数可以用于将对象转化为元组。 

a = tuple([1, 2, 3])
ch = tuple('abc')
num = tuple(x for x in range(10))
print(a, ch, num)  # 输出(1, 2, 3) ('a', 'b', 'c') (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

注意:元组并不是使用括号就是元组的

list1 = [x for x in range(10)]
tuple1 = (x for x in range(10))
print(list1, tuple1)

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <generator object <genexpr> at 0x0000020AC37EFED0>

很明显tuple1并不是元组,具体这个是什么,后面会进一步讲解。 

二.集合(set)

这里学的集合与数学上的集合并不相同。

Python中的集合是一种无序、可变的容器,它由不重复的元素组成。

不同于列表,集合中的元素是不允许重复的,元素是无序的不分前后关系。 、

集合是通过花括号{}创建的,元素之间使用逗号分隔。

创建集合:可以使用花括号{}或set()函数来创建一个集合。

s1 = {1, 2, 3, 4, 5}
s2 = set([1, 2, 3, 4, 5])
print(s1, s2)  # 输出{1, 2, 3, 4, 5} {1, 2, 3, 4, 5}
print(type(s1), type(s2))  # 输出<class 'set'> <class 'set'>

add()函数可以用于向集合中加入元素:

s = {1, 2, 3}
s.add(4)

remove()函数可以移除集合中的元素

s = {1, 2, 3}
s.remove(2)

需要注意的是;如果要删除的元素不存在,会抛出KeyError异常。

有没有如果不存在但是不会抛出异常的函数呢?

a = {1, 2, 3, 4, 5}
a.discard(6)

discard函数对于集合就不会抛出异常。 

pop函数是用于弹出一个元素并返回,但是由于集合是无序的,所以它在弹出的时候的元素是完全随机的。

a = {-1, 0, 1, 2, 3, 4, 5}
a.pop()
print(a)  # 输出{1, 2, 3, 4, 5, -1}

 三.字典(dict)

 在学习字典之前,先来看这样一个问题,如何创建一个空集合?

a = {}
b = set([])

 a还是b呢?

注意:创建一个空集合必须使用set()函数来进行,因为{}是用于创建字典的。

输出结果:print(type(a), type(b))         <class 'dict'> <class 'set'>

字典是一种无序的数据结构,用于存储键值对。字典是通过花括号{}来表示的,每个键值对之间用逗号分隔。键必须是唯一的,而值可以是任意类型的对象。

什么是键值对呢?

键值对是计算机中一种非常重要的概念。

每一个键都对应着一个值,通过这个值我们就可以清楚的找到这个值。

 比如通过学号可以轻易找到某个学生,通过电话号码可以找到某个人。这里的学号和电话号码就是键,学生和人可以理解为值。这是一种映射关系

键值对是一种数据结构,它是由一个键和一个相应的值组成的。键和值之间存在一一对应的关系。键用于唯一标识值,值则存储相应的数据。在键值对中,键是唯一的,不重复的,而值可以是任意类型的数据,比如字符串、数字、对象等。键值对常用于存储和表示数据,可以通过键来快速访问和查找对应的值。

为啥键必须是唯一的呢?,因为要通过键找到一个准确的值,如果键不唯一,那么就会出现找到多个的情况。但是值可以不唯一,比如一个人可以拥有多个手机号。 

这里的字典,其实和现实生活中的字典很类似,比如有一个英文单词不认识,这个单词就是key,中文翻译就是value

那么如何定义一个字典呢?

a = {
    1: 'zhangsan',
    2: 'zhangsan',
    4: 'lishi',
    5: 'wangwu'
}

至于为啥,不把这个字典写在一行,是因为,为了方便观察。最后一个键值对的逗号可写可不写。

那么如何通过键来找到值呢?这里还是要用到[ ]操作符

a = {
    'id': 1,
    'name': 'zhangsan',
    'score': 99
}
print(a['id'], a['name'], a['score'])  # 输出1 zhangsan 99

在字典中,key的类型不一定都一样 ,而且key的类型是有所限制的,key的数据类型可以是不可变的数据类型,例如整数、浮点数、字符串、元组等。不能作为字典的key的数据类型是可变的数据类型,例如列表和字典。如果你使用了可变的数据类型,在使用的时候会报错:

TypeError: unhashable type: 'list'

value就比较随意了既不必都一样,也没有限制,什么都可以。

# not in 来判定 key 在字典中不存在

# in 来判定 key 在字典中不存在

这里的判断只能判读key,于value无关。

a = {
    'id': 1,
    'name': 'zhangsan',
    'score': 99
}
print('id' in a)
print(1 not in a)

 对于字典来说,使用in和[]这样的操作均是非常高效的,而对于列表来说使用in是非常低效的,而使用[]是非常高效的。

因为对于列表来说使用in会遍历整个列表,直到找到要的元素,而字典底层采用了特殊的数据结构哈希表,所以非常高效,这部分内容我们后续还会继续讲解。

遍历指的是,把一个可迭代对象,里面包含的元素依次取出,来进行一些操作,整个过程要求不重不漏

# 直接使用 for 循环来遍历字典
a = {
    'name': 'zhangsan',
    'id': 1,
    'score': 90
}

for key in a:
    print(key, a[key])

输出结果:name zhangsan
id 1
score 90 

# 这个操作就是往字典里插入新的键值对.
a['score'] = 90
print(a)

# 2. 在字典中, 根据 key 修改 value, 也是使用 [ ] 来进行的~
a['score'] = 100
print(a)

# 3. 使用 pop 方法, 根据 key 来删除键值对~
a.pop('name')
print(a)

对于插入和修改来说,如果key不存在就是插入,如果存在了就是修改。

比如:

a = 10
a = 20

第一个代码就是创建变量,第二行代码就是修改变量的值。

注:字典的各种操作都是针对key来进行的,增加,删除,获取,修改value 

字典也有几个成员函数:keys,values,items

这几个函数的功能分别是返回key,value,和整个键值对

print(a.keys())
print(a.values())
print(a.items())
# dict_keys(['name', 'id', 'score'])
# dict_values(['zhangsan', 1, 90])
# dict_items([('name', 'zhangsan'), ('id', 1), ('score', 90)])

不难发现,每一对键值对其实是一个元组

 字典,元组,集合都是python中非常常用的数据类型,他们的内部可以包含其他的数据类型。

在Python中,哈希函数是一种用于将任意大小的数据映射到固定大小值的函数。哈希函数通常用于检查数据的完整性和验证数据的唯一性。

Python提供了许多内置的哈希函数,如md5、sha1、sha256等。这些哈希函数是通过在输入数据上运行特定的算法来生成固定长度的哈希值。

# 使用 hash 函数能够计算出一个变量的哈希值.
print(hash(0))
print(hash(3.14))
print(hash('hello'))
print(hash(True))
print(hash((1, 2, 3)))

集合内的元素就必须是可哈希的数据类型,这样的类型一般情况下是只读的。

注意:集合不是可哈希的类型 。

# 有的类型是不能计算哈希值的.
print(hash([1, 2, 3]))
print(hash({ }))

如果分别运行以上两行代码,就会抛出异常:

TypeError: unhashable type: 'list'

 TypeError: unhashable type: 'dict'

意思分别是,列表不是可哈希类型,字典不是可哈希类型。 

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

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

相关文章

科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【论文速读】Transformer:Attention Is All You Need

Transformer&#xff1a;Attention Is All You Need 摘要模型架构注意力模型Scaled Dot-ProductMulti-Head Attention Position-wise Feed-Forward NetworksEmbeddings and SoftmaxPositional Encoding 摘要 我们提出了一种新的简单的网络架构&#xff0c;Transformer&#xf…

OSPF多区域组网实验(思科)

华为设备参考&#xff1a;OSPF多区域组网实验&#xff08;华为&#xff09; 技术简介 OSPF多区域功能通过划分网络为多个逻辑区域来提高网络的可扩展性和管理性能。每个区域内部运行独立的SPF计算&#xff0c;而区域之间通过区域边界路由器进行路由信息交换。这种划分策略适用…

如何构建基因单倍型网络

一. 单倍型网络 单倍型网络图通常是指在遗传学和进化生物学中使用的一种图形表示法&#xff0c;用于描述不同个体或群体之间的遗传关系。这种图形通常用于研究基因或DNA序列在不同个体之间的变化和传递。在单倍型网络图中&#xff0c;节点表示不同的单倍型&#xff0c;而边表示…

自己搭建ntp服务器

1、背景 终端在使用过程中&#xff0c;发现联网后进行NTP(network time protocol&#xff0c;网络时间协议)校时过程中&#xff0c;经常出现校时失败的问题&#xff0c;特别是本地环境&#xff0c;因此需要在自己这边搭建测试环境。 2、搭建步骤 2.1 安葬服务器 sudo apt-get…

Python项目:数据可视化_下载数据【笔记】

源自《Python编程&#xff1a;从入门到实践》 作者&#xff1a; Eric Matthes 02 下载数据 2.1 sitka_weather_07-2021_simple.csv from pathlib import Path import matplotlib.pyplot as plt import csv from datetime import datetimepath Path(D:\CH16\sitka_weather_0…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月25日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月25日 星期六 农历四月十八 1、 气象台&#xff1a;未来三天&#xff0c;北方雷雨侵扰&#xff0c;南方暴雨大暴雨将成片出现&#xff0c;今年首个台风生成在即。 2、 人社部&#xff1a;拟增加网络主播等19个新职业&am…

“高考钉子户”唐尚珺决定再战2024年高考

“高考钉子户”唐尚珺决定在2024年再次参加高考&#xff0c;这个选择确实很特别也很有趣。十几年连续参加高考&#xff0c;他已经积累了大量的备考经验和应试技巧。这样的经验对于高考辅导机构来说无疑是非常宝贵的资源&#xff0c;他如果选择去辅导机构当老师&#xff0c;应该…

运算符重载(上)

目录 运算符重载日期类的比较判断日期是否相等判断日期大小 赋值运算符重载赋值运算符重载格式赋值运算符只能重载成类的成员函数不能重载成全局函数用户没有显式实现时&#xff0c;编译器会生成一个默认赋值运算符重载&#xff0c;以值的方式逐字节拷贝 感谢各位大佬对我的支持…

使用llama.cpp实现LLM大模型的格式转换、量化、推理、部署

使用llama.cpp实现LLM大模型的量化、推理、部署 大模型的格式转换、量化、推理、部署概述克隆和编译环境准备模型格式转换GGUF格式bin格式 模型量化模型加载与推理模型API服务模型API服务(第三方)GPU推理 大模型的格式转换、量化、推理、部署 概述 llama.cpp的主要目标是能够在…

微信小程序反编译/解包

微信小程序反编译/解包 环境与工具 操作系统&#xff1a;Windows 11 23H2 微信版本&#xff1a;3.9.10.19 Q&#xff1a;如何找到小程序文件位置&#xff1f; A&#xff1a;在微信的设置找到文件路径&#xff0c;小程序文件位于 \WeChat Files\Applet\。 Q&#xff1a;小程…

centos下yum -y install npm报没有可用软件包 npm

yum -y install npm安装报错 失败原因是因为缺少epel&#xff08;epel是社区打造的免费开源发行软件包版本库&#xff0c;系统包含大概1万多个软件包&#xff09;&#xff0c;需要先安装epel-release 解决方法&#xff1a; 1、先安装epel-release yum -y install epel-releas…

1106 2019数列

solution 维护长度为4的数组&#xff0c;对于第四位之后的数字&#xff0c;为所维护数组的所有元素之和 的个位数 #include<iostream> using namespace std; int main(){int n, a[4] {2, 0, 1, 9}, cnt 0, d;scanf("%d", &n);for(int i 0; i < n; …

dmanywhere的docker制作

dmanywhere的docker制作 官网地址&#xff1a; http://www.dmanywhere.cn/ 下载相关执行文件。 Dockerfile的默认命名是“Dockerfile”&#xff0c; 在构建镜像时&#xff0c;如果没有指定Dockerfile文件&#xff0c;Docker通常会寻找名为“Dockerfile”的文件 1.Dockerf…

Python使用连接池操作MySQL

测试环境说明&#xff1a;Python版本是 3.8.10 &#xff0c;DBUtils版本是3.1.0 &#xff0c;pymysql版本是1.0.3 首先安装指定版本的连接池库DBUtils 、还有pymysql pip install DBUtils3.1.0 pip install pymysql1.0.3创建文件 sqlConfig.py # sqlConfig.pyimport pymysql…

vue2vue3为什么el-table树状表格失效?

上图所示&#xff0c;后端返回字段中有hasChildren字段。 解决树状表格失效方案&#xff1a; 从后端拿到数据后&#xff0c;递归去掉该字段&#xff0c;然后就能正常显示。&#xff08;复制下方代码&#xff0c;直接用&#xff09; 亲测有效&#xff0c;vue2、vue3通用 /**…

【飞舞的花瓣】飞舞的花瓣代码||樱花代码||表白代码(完整代码)

关注微信公众号「ClassmateJie」有完整代码以及更多惊喜等待你的发现。 简介/效果展示 这段代码是一个HTML页面&#xff0c;其中包含一个canvas元素和相关的JavaScript代码。这个页面创建了一个飘落花瓣的动画效果。 代码【获取完整代码关注微信公众号「ClassmateJie」回复“…

泰克TBS2204B示波器如何设置存储时间?

示波器是电子测量领域中不可或缺的重要仪器之一。泰克公司生产的TBS2204B数字示波器是一款广受欢迎的中端市场产品&#xff0c;其中存储时间设置是用户需要掌握的关键操作之一。 TBS2204B示波器的存储时间设置涉及以下几个方面&#xff1a; 1. 存储时间基准 存储时间基准决定…

深度神经网络——什么是 K 均值聚类?

K 均值聚类 K 均值聚类是 无监督学习在所有无监督学习算法中&#xff0c;K 均值聚类可能是使用最广泛的&#xff0c;这要归功于它的强大功能和简单性。 K-means 聚类到底是如何工作的&#xff1f; 简而言之&#xff0c;K 均值聚类的工作原理是 创建参考点&#xff08;质心&am…

拼多多携手中国农业大学,投建陕西佛坪山茱萸科技小院

5月16日下午&#xff0c;中国农业大学陕西佛坪山茱萸科技小院在佛坪县银厂沟村揭牌。佛坪县素有“中国山茱萸之乡”的美誉&#xff0c;是全国山茱萸三大基地之一&#xff0c;当地山茱萸是国家地理标志产品&#xff0c;山茱萸肉产量位居全国第二。 为充分发挥佛坪县得天独厚的山…