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

个人主页:星纭-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.mzph.cn/pingmian/14954.shtml

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

相关文章

MySQL存储过程for循环处理查询结果

在MySQL数据库中&#xff0c;存储过程是一种预编译的SQL语句集&#xff0c;可以被多次调用。在MySQL中使用存储过程查询到结果后&#xff0c;有时候需要对这些结果进行循环处理。 1. 创建表 CREATE TABLE t_job (job_id int(11) unsigned NOT NULL AUTO_INCREMENT,job_name v…

崆峒酥饼:端午佳节的美味之选

崆峒酥饼&#xff1a;端午佳节的美味之选 在端午佳节来临之际&#xff0c;崆峒酥饼成为了备受瞩目的佳节之选。崆峒酥饼以其独特的制作工艺和口感&#xff0c;为这个传统节日增添了一份美味与温馨。 崆峒酥饼源自甘肃平凉&#xff0c;是当地的传统名点。它选用优质的面粉、油脂…

Linux——进程与线程

进程与线程 前言一、Linux线程概念线程的优点线程的缺点线程异常线程用途 二、Linux进程VS线程进程和线程 三、Linux线程控制创建线程线程ID及进程地址空间布局线程终止线程等待分离线程 四、习题巩固请简述什么是LWP请简述LWP与pthread_create创建的线程之间的关系简述轻量级进…

云端升级,智能适配——LDR6282,USB-C接口显示器的最佳选择

华为MateView USB-C接口显示器技术深度解析与科普 随着科技的飞速发展&#xff0c;终端显示产品也迎来了全新的变革。在众多更新迭代中&#xff0c;华为MateView显示器凭借其独特的USB-C接口设计&#xff0c;为用户带来了前所未有的便捷体验。本文将带您深入探索这款显示器的技…

智能界面设计:数字孪生与大数据结合的美学典范

智能界面设计&#xff1a;数字孪生与大数据结合的美学典范 引言 在数字化浪潮的推动下&#xff0c;智能界面设计成为了连接用户与技术的重要桥梁。数字孪生技术与大数据的结合&#xff0c;不仅为UI设计带来了前所未有的创新机遇&#xff0c;更成为了美学与功能性融合的典范。…

C#_初识变量类型与方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp2 {class Program{static void Main(string[] args){///--------常用的变量类型float a 3.12f; //单精度32bit浮点型后缀要加fdou…

个人博客网站开发笔记3

文章目录 前言p4 Front Matterp5 配置文件p6 命令p7 部署新的教学视频部署博客到github找视频教程也是一个技能详细步骤安装主题安装渲染器修改主题创建gitub仓库生成密钥验证密钥是否匹配修改config文件推送到github 前言 主要是安装啥的比较费劲 现在已经比较简单了感觉 之…

Android 共享内存

Parcelable 和 Serializable 区别 Serializable IO完成&#xff08;通过磁盘文件读写&#xff09; Parcelable C 对象指针 来实现共享内存 import android.os.Parcel; import androidx.annotation.NonNull;public class ApiResponseBean extends Throwable implements Parce…

基于 Java 的浏览器——JxBrowser使用分享

软件介绍 JxBrowser 是一个基于 Java 的浏览器&#xff0c;它使用 Chromium 引擎来提供高性能的网页渲染和丰富的功能。它支持多种 GUI 框架&#xff0c;如 Swing、JavaFX 和 SWT&#xff0c;使得在 Java 应用程序中嵌入浏览器组件变得简单。 JxBrowser 是一个适用于多种用途…

学习笔记——STM32F103的V3版本——3*3矩阵键盘控制数码管

一.硬件 1.数码管 2.3*3的矩阵键盘&#xff08;自己做的模块&#xff08;手残党一枚&#xff09;&#xff09; 3.总体连接 二.在Keil5中的部分软代码 test.c中&#xff1a; #include "sys.h" #include "usart.h" #include "delay.h" #include …

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

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

Vitis HLS 学习笔记--控制驱动任务示例

目录 1. 简介 2. 代码解析 2.1 kernel 代码回顾 2.2 功能分析 2.3 查看综合报告 2.4 查看 Schedule Viewer 2.5 查看 Dataflow Viewer 3. Vitis IDE的关键设置 3.1 加载数据文件 3.2 设置 Flow Target 3.3 配置 fifo 深度 4. 总结 1. 简介 本文对《Vitis HLS 学习…

【编译原理】词法分析器的设计与实现

一、实验目的 通过设计编制调试一个具体的词法分析程序&#xff0c;加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程&#xff0c;从输入的源程序中&#xff0c;识别出各个具有独立意义的单词&…

SQLmap学习以及题解运用

1.简介 SQLmap是一款开源的SQL注入工具&#xff0c;用于检测和利用Web应用程序的SQL注入漏洞。SQLmap支持多种数据库管理系统&#xff0c;包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite等&#xff0c;并支持各种不同的操作系统和平台。 这里主要分为四大部分…

同余定理性质

在算法题中碰到的这个同余定理定理&#xff0c;记录一下性质

机器学习之常用算法与数据处理

一、机器学习概念&#xff1a; 机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、计算机科学等多门学科。它的核心概念是通过算法让计算机从数据中学习&#xff0c;改善自身性能。机器学习专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识…

Android Low Storage机制之DeviceStorageMonitorService

一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块&#xff0c;主要用来&#xff1a; 1.监视设备存储&#xff08;“/ data”&#xff09;。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…

【项目】教你手把手完成博客系统(三)显示用户信息 | 实现退出登录 | 实现发布博客

文章目录 教你手把手完成博客系统&#xff08;三&#xff09;7.实现显示用户信息1.约定前后端交互接口2.前端通过ajax发起请求3.服务器处理请求 8.实现退出登录1.约定前后端的接口2.前端发起请求3.服务器处理请求 9.实现发布博客1.约定前后端的交互接口2.前端构造请求3.服务器处…

齐护K210系列教程(三十)_多任务切换

多任务切换 1&#xff0c;任务1的设定2&#xff0c;任务2的设定3&#xff0c;主程序4&#xff0c; 课程资源联系我们 在开发项目时&#xff0c;我们常会用到AIstart的多个任务来切换应用&#xff0c;比如当我识别到某种卡片时&#xff0c;要切换到别的任务&#xff0c;这样就要…

CentOS-7安装教程

目录 安装 修改主机名 配置静态IP 镜像下载地址 https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso VMware Workstation Pro下载 VMware Workstation Pro各版本下载&#xff08;2024.5.5之后&#xff09;(Windows与Linux安装包不限…