python中的数据类型-适合新手-比较完善(写了好久……)

news2024/11/23 20:49:43

作者的话

        首先,我先申明,以下思路仅为个人理解,如有不同,望指导,谢谢。

        数据类型它是什么,有什么用,怎么用就是它的全部内容,知识框架串联起来之后就是这三部分内容,没有什么特别的东西就只是单纯的可以培养这个习惯,之后就可以很轻松的学习使用之后串联的全部知识,当一次一次的深入学习,这个框架下的东西也就越来越丰富,底层的知识也就理解的越深。

基本数据类型的拆分理解

数字类型(number)

整型(int)

按照数学思维的理解就是整数,包含正整数、负整数、0;

使用python中的type函数可以写下如下内容

num1 = 0
num2 = -5
num3 = 5

print(type(num1))  #  打印: <class 'int'>
print(type(num2))  # 打印: <class 'int'>
print(type(num3))  # 打印: <class 'int'>

浮点数(float)

用数学思维的理解,就是有小数点的数字,如:1.0    、  -1.0

字符串(string)

        字符串,“其串如其名”,单个字符串联在一起就是字符串了,算了,不开玩笑了,打住了,下面才是真的定义。

        字符串是由字符组成的序列,能用单引号', 双引号",三引号''' 或者  """的形式定义它。

我上面说的单个字符其实也可以理解为字符串,当使用单引号‘1’,此时他就是字符串,python中是字符串类型,c语言中则是有字符类型和字符串类型,它们是分开的,有一些细分的差别。

        

# 使用单引号
string1 = 'Hello, World!'

# 使用双引号
string2 = "Python is so nice!"

# 使用三引号,可以包含多行
string3 = '''这是
一个多行字符串'''

string4 = """另一个
多行字符串"""


上面是字符串的定义操作,接下来该了解一下它的其他相关操作了,上代码

1.字符串串联


# 字符串之间的串接
name = 'Bob'
age = '25'
message = 'Hi, my name is ' name +' and I am ' age + 'years old.'
print(message)

2.多次打印同一个字符串

string = "Python"
re_string = string * 3
print(re_string)  # 打印: Python Python Python 

3.字符串的切片

代码中的的string[2:7]是指从下标(索引)为2到7,2为起始,7为末尾,就像数学的区间一样,左闭右开。[2, 7)

string = "HelloWorld"
sub_string = string[2:7]
print(sub_string)  # 打印: lloWo

        还有很多操作,就不进行一一列举了,pycharm是个好东西,你可以在尝试使用字符串操作时,使用它提出的补全的各种函数,编程要更深理解自然是需要自己手打出来的。

列表(list)

首先,还是先从是什么,有什么用,怎么用,这三个思路思考问题,然后在进行学习

列表是一种有序且可变的数据类型,有序(指的是有一定顺序),可变(指的是元素可变);

列表可以存储不同类型的元素,包括整型、字符串、列表、元组、字典、集合等主要的数据类型

列表的特点:

1.列表具有有序性:

列表中的元素按照他们添加的顺序进行存储,并且可以通过索引访问特定位置的元素;还有一个小点就是下标起始为0.

   my_list = [10, 20, 30, 40, 50]
   print(my_list[0])  # 打印: 10

2.列表具有可变性:

可以对列表进行修改,对元素进行增删改查

   my_list = [1, 2, 3]
   my_list.append(4)  # 在末尾添加元素,4
   my_list[1] = 5  # 修改第二个元素,让第二个元素的值改为5
   del my_list[0]   # 删除第一个元素,1
   print(my_list) # 打印列表,[5, 3, 4]

3.列表可以包含重复元素

它因为可以包含重复的元素,就可以存放学科成绩,可以实现重复的成绩,有着集合不具有的有点,可以根据索引查询,但是它有顺序,集合没有顺序,索引如果要通过它实现随机分配等问题,就需要使用其他的一些模块使用这些模块定义的函数方法

my_list = [1, 1, 2, 2, 3]

4.列表推导式

详细可以看我以前的一篇博客,总之推导式唯一的作用,就是能够简洁代码;

python中的推导式-CSDN博客

然后对列表的一些操作无外乎就是增删改查,比如把外部数据添加到里面用append、extend、insert等,把列表内部的数据进行删除,根据索引进行删除pop,还可以直接删除对应的数据使用remove 、del等方式,然后修改就是根据索引进行修改,查询的话就是用索引返回对应的值index函数就行。

元组(tuple)

        我对元组的理解就是一种特殊的列表,只是他的元素不可变,但是可以是用下面的方法实现对元组的改变,但是本质并不是对元组进行改变。

元组的特点:

1.元组具有有序性

2.特殊之处*不可变性*

元组的特殊就特殊在他是不可变的,以便用于保存固定参数,适合使用在需要固定的地方,避免因为地址的错误访问出现问题。

而且元组刚好是因为不可变的,因此可以使用它作为字典的key,列表是不可以的,而python的优点就在于使用它进行一些数据的分析操作,列表是可变的,正好用来存储数据,而又需要一定的可靠存储空间,使用元组就刚好,而且元组的不变性可以带来一些性能的优势,特别在涉及大量数据和频繁的操作时,还有可以使用元组用来打包函数返回的值等等。

创建元组

# 使用这样的方法创建单个元素的元组
my_tuple = (1,)

# 使用特殊的方法实现对元组内部的修改
my_tuple_2 = (1, 2, 3, 4, [1, 2, 3, 4])
my_tuple_2[4][0] = 0
print(my_tuple_2)  # 打印修改了列表的元组

创建好元组了就需要对元组进行一些操作(也就是怎么用元组的问题),比如访问元组的元素。

访问方法与列表是相同的,按照索引查找即可,但还会关联到异常的内容,比如访问超出序列范围的索引就会触发IndexError

my_tuple = (10, 20, 30, 40, 50)

# 访问第一个元素
print(my_tuple[0])  # 打印: 10

# 访问第三个元素
print(my_tuple[2])  # 打印: 30

# 如果尝试访问超出范围的索引会引发 IndexError,还有另一类KeyError 他们呢作为LookupError的子类
# print(my_tuple[5])  # 会报错

# 可以使用负值索引从末尾开始访问
print(my_tuple[-1])  # 打印: 50
print(my_tuple[-3])  # 打印: 30

字典(dictionary)

字典,简称dict,但是不建议直接使用dict作为标识符,因为他算是pycharm中的一个关键字,命名需要规范一点,相应的这些数据类型除了number都是关键字不建议使用作为标识符,尤其是这些数据类型可以进行强转,如果用错了,就会把数据类型改变,导致出现各种错误。

好,还是先从字典的定义开始,字典是一种无序的键值对数据结构。

它用来干什么?它用于将键(通常是唯一且不可变的数据类型,如字符串、数字或元组)与值(可以是任何数据类型,包括列表、字典、函数等)关联起来。比如应用于存储和快速查找具有关联关系的数据,比如学生学号和姓名,商品ID和价格,身份证等。

定义字典的方式

花括号 {键:值}来创建字典

方式一我用的比较多,也许是我能力不足,达不到使用其他方式的资格

方式二与方式三我用的甚至算是很少,方式三更是我第一次使用,发现自己在写博客的时候,知识点越写越多,我自己的知识网络也更加清晰,写这些对自己也是一个提升,都看到这里了,确定不点个赞吗,不点赞也行,记得收藏,我发现很少有其他人的博客会像我写这么多纯粹自己的理解,很多都是知识点一一罗列完就没有了,收藏一下以后想找也方便,毕竟这个平台的想找到合适的的内容感觉确实不易。

# 方式一
my_dict_1 = {'key1': 'value1', 'key2': 'value2'}
print(my_dict_1)
# 方式二
my_dict_2 = dict(key1='value1', key2='value2')
print(my_dict_2)
# 方式三
key_value_pairs = [('key1', 'value1'), ('key2', 'value2')]
my_dict_3 = dict(key_value_pairs)
print(my_dict_3)

然后就到了怎么用字典了,代码示例:

# 创建字典:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 访问字典中的值,通过键来获取对应的值
print(my_dict['name'])  # 打印: Alice
# 通过键修改字典中的值:
my_dict['age'] = 26
# 添加新的键值对
my_dict['job'] = 'Engineer'
# 删除键值对
del my_dict['city']
# 打印字典
print(my_dict)  

查字典自然也是有方法的,查新华字典是查询,查询python字典也是查询,那他们有什么不同?自然就需要你去试试了。

还有一些返回相关键或值抑或是键值对的方法,例如keys(),values(),items()等方法,各有各的形式吧,而且当使用for循环遍历字典时,也是很好用的。

集合(set)

集合,相比都不陌生了,从初中学到大学,它是什么也就无须多言了,但也请不要小看他,如果要理解它在python中是什么的话,那它就是一个特殊的数据容器。

# 直接创建
my_set = {1, 2, 3}
# 由列表强转创建
my_list = [1, 2, 2, 3, 3, 3]
my_set_from_list = set(my_list)  
print(my_set_from_list) # {1, 2, 3}

集合的特点:

1.集合的元素唯一,集合中的元素不会重复

2.集合内部无序

那,就说说为什么它这么重要吧,它具有什么让他的地位如此之高?

1.数据去重,当现在有一个数据容器存放着大量的数据,可以将他快速转化为集合从未找出唯一项。

2.可以快速判断某数据是否在集合中,仅仅需要使用in运算符判断一下就可以。

3.集合之间的运算(交并补等运算),在处理不同数据集合之间的关系很好用,不至于想不到解决办法,毕竟其他方法哪怕再复杂,也有集合给你兜底,就像一个老大哥一样。

# 并集 使用 | 运算符
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1 | set2  # 或者 set1.union(set2)
print(union_set)  # 打印{1, 2, 3, 4, 5}
# 交集 使用 & 运算符
intersection_set = set1 & set2  # 或者 set1.intersection(set2)
print(intersection_set)  # 打印 {3}

基本数据类型的关系的理解

基本数据类型的关系大致分为两类 :组合数据类型 、可变数据类型与不可变数据类型

可变数据类型与不可变数据类型

为什么存在?因为内存的管理要求分为这两个类型;

不可变类型由于需要保证数据一致性和安全性而诞生,例如配置参数、常量值等等。

不可变类型由于它具有固定性,可以被共享和缓存重用,从而节省内存。其中比较明显的就是缓存重用,因为缓存的存在,还需要经常清除缓存,可以说有利有弊。

可变数据类型由于python本身自己需要强大的开发效率,需要进行大量的数据分析,因此必须有这种数据站出来顶住数据分析的重任,例如缓存、数据集合等。

可变类型则适用于动态修改的大量数据结构,通过避免让对象频繁的创建和销毁以节省内存,相应的控制数据的规模需要存储实际需要的数据。举个例子,不如在使用列表时,不要每次都创建一个列表,可以在原列表进行一定的操作。

这个分类就是由内存决定的,只需要从内存的角度考虑这个问题,他的本质区别就在这里了。

这两者最本质的区别在于:

内存中的那块地址所存储的值是否可以被修改

最离谱的就是,他的可不可变刚好与内存地址的改变相反

变数据类型:变量的值改变,地址不会

不可变数据类型:变量的值改变,地址

组合数据类型

        是什么:在Python中,组合数据类型(也称为复合数据类型)是指可以包含其他数据类型的数据结构。

        常见的组合数据类型包括列表(list)、元组(tuple)集合(set)和 字典(dictionary)。

        有什么用:这些数据结构能够将多种类型的数据组织在一起,是的数据处理和操作更加灵活和便捷。

        组合数据类型有以下几个优点:

1.组织数据:能够将相关数据组合在一起,形成一个有组织的结构,使得数据管理更加方便。比如根据需求可以把列表变成集合,可以把字典转换成列表。相对于基本数据类型只能表达式单一的数据,组合数据类型就明显可以操作比基本数据类型所能处理的复杂的多的数据结构。

2.灵活性:可以包含不同类型的数据,比如一个列表可以包含整数、字符串、甚至其他列表等数据。

3.代码简洁:通过组合数据类型,可以减少代码的复杂度,提高代码的可读性和可维护性。如果通过转换数据类型的话,很多需求就可以很轻松的解决了。

4.操作简单:组合数据类型提供了很多的内置方法,可以很方便的进行数据的增删改查,自然是显而易见了。

        怎么用

使用集合的操作,需要存储和操作一组不重复的元素时,可以用set

有序数据集合:用列表或者元组

键值对映射:需要用键值对时,可以用dict

最关键的是,嵌套结构,当需要表示复杂的嵌套数据结构,可以组合起来用,比如处理Json数据或者树形结构的时候。

关于强制转换问题

数据类型之间的转换并不是可以随意转换的,需要遵守一定规则,

1.数字类型:  

        整数转浮点数,可以随意转

        浮点数转整数,直接转换会截断小鼠点后面对数据,建议使用round()函数四舍五入

2.字符串与数字类型:

        字符串转数字,需要让字符串内数据全部是数字,否则会抛出异常,无法转换

        数字转字符串的话就可以随意了

3.组合数据类型:

        列表、元组、集合之间的话,可以通过相应的函数转换,但需要注意元素的类型和数据,不然还是会抛出异常,不过简易初学者的话,还是多敲一敲,多见一见异常,见多了之后就自然知道是哪里的问题了

        字典类型就比较特殊了,他是键值对结构,不太好弄,其实这篇博客,我学到了创建字典的第三种方式可以通过第三种方式,把字典转换成列表和元组,也可以把键值对分别遍历出来,然后再多一步,转换的过程。

# 定义一个字典
my_dict = {'a': 1, 'b': 2, 'c': 3}

# 字典转列表
# 列表元素为键值对组成的元组
dict_to_list = list(my_dict.items())
print("字典转列表:", dict_to_list)  # 打印: [('a', 1), ('b', 2), ('c', 3)]

# 字典转元组
# 元组元素为键值对组成的元组
dict_to_tuple = tuple(my_dict.items())
print("字典转元组:", dict_to_tuple)  # 打印: (('a', 1), ('b', 2), ('c', 3))

# 字典转集合
# 集合元素为字典的键
dict_to_set = set(my_dict.keys())
print("字典的键转集合:", dict_to_set)  # 打印: {'a', 'b', 'c'}
# 集合元素为字典的值
dict_value_to_set = set(my_dict.values())
print("字典的值转集合:", dict_value_to_set)# 打印{1, 2, 3}

感谢观看,如有问题,随时评论或私信,如有帮助感激不尽。

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

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

相关文章

【网络安全科普】勒索病毒 防护指南

勒索病毒简介 勒索病毒是一种恶意软件&#xff0c;也称为勒索软件&#xff08;Ransomware&#xff09;&#xff0c;其主要目的是在感染计算机后加密用户文件&#xff0c;并要求用户支付赎金以获取解密密钥。这种类型的恶意软件通常通过电子邮件附件、恶意链接、下载的软件或漏洞…

数论基础知识

整除 辗转相除法 同余 模计算机 一次同余方程 费马小定理&#xff5c;欧拉定理&#xff5c;威尔逊定理 孙子定理(中国剩余定理) 快速指数算法&#xff08;快速模乘法&#xff09;&#xff08;反复平方乘&#xff09; 模重复平方法 二次剩余 Legendre符号欧拉判别法 原根 gc…

golang 解压带密码的zip包

目录 Zip文件详解ZIP 文件格式主要特性常用算法Zip格式结构图总览Zip文件结构详解数据区本地文件头文件数据文件描述 中央目录记录区&#xff08;核心目录记录区 &#xff09;中央目录记录尾部区 压缩包解压过程方式1 通过解析中央目录区来解压方式2 通过读取本地文件头来解压两…

JVM常用工具中jmap实现手动进行堆转储(heap dump文件)并使用MAT(Memory Analyzer Tool)进行堆分析-内存消耗分析

场景 JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用&#xff1a; JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用_jvm分析工具-CSDN博客 上面讲了jmap的简单使用。 下面记录其常用功能&#xff0c;实现堆…

C#+layui+echarts实现动态生成折线图

概要 C#layuiecharts实现动态生成折线图 整体架构流程 后端是c#语言编写的业务流程,前端是layui和echarts 技术细节 1.先看echarts折线图需要什么样子的数据,在想后端怎么处理 2.后端代码 List<ValveTempData> list new List<ValveTempData>(); string …

Spring Cloud中怎么使用Resilience4j RateLimiter对接口进行限流

在微服务架构中&#xff0c;限流是保护系统稳定性的重要手段之一。限流可以防止某个服务因流量过大而过载&#xff0c;影响整个系统的稳定性和性能。Resilience4j 提供了多种限流策略&#xff0c;其中 RateLimiter 是一种常用的限流机制。本文将详细介绍如何在 Spring Cloud 项…

组内第一次会议

会议内容 1、科研平台使用 增删改查对文件 cp -r /root/mmdetection/dataset/ /root/user/wbzExperiment/mmdetection/ rm -r /root/user/yolov5-master tar -czvf test03.tar.gz test03/ unzip abc.zip 上传文件、解压文件&#xff1a;要在自己的目录中&#xff0c;进入…

普中51单片机:LED点阵屏组成结构及实现方法详解(九)

文章目录 引言什么是LED点阵屏&#xff1f;工作原理74HC595移位寄存器基本引脚作用级联工作原理 电路图代码演示——16*16LED点阵屏轮播点亮每行LED代码演示——显示数字0代码演示——16*16游动字幕显示 引言 LED点阵屏作为一种广泛应用于现代显示技术的设备&#xff0c;因其能…

Linux_线程的使用

目录 1、线程与进程的关系 2、线程的优缺点 3、创建线程 4、查看启动的线程 5、验证线程是共享地址空间的 6、pthread_create的重要形参 6.1 线程id 6.2 线程实参 7、线程等待 8、线程退出 9、线程取消 10、线程tcb 10.1 线程栈 11、创建多线程 12、__th…

学生信息管理系统设计

学生信息管理系统的设计是一个综合性的项目&#xff0c;涉及到数据的存储、检索、更新和删除等基本操作&#xff0c;同时也需要考虑系统的易用性、安全性和扩展性。以下是一些关键步骤和要素&#xff0c;用于指导设计这样一个系统&#xff1a; 1. 需求分析 目标用户&#xff…

wls2下的centos使用桥接模式连接宿主机网络独立静态ip

前提&#xff1a;wsl2已安装&#xff0c;可正常更新 1.在控制面板中&#xff0c;打开开启或关闭windows功能&#xff0c;将里面的 Hyper-V功能打开&#xff0c;此处涉及重启 2. 按一下win键&#xff0c;输入hy&#xff0c;上面可以看到Hyper-V Manager,点进去 3.选择右边的 Vi…

Redis系列命令更新--Redis有序集合命令

Redis有序集合&#xff08;sorted set&#xff09; &#xff08;1&#xff09;说明&#xff1a; A、Redis有序集合和集合一样也是string类型元素的集合&#xff0c;且不允许重复的成员&#xff1b;不同的是每个元素都会关联一个double类型的分数&#xff1b;redis正式通过分数…

Java语言程序设计——篇五(1)

数组 概述数组定义实例展示实战演练 二维数组定义数组元素的使用数组初始化器实战演练&#xff1a;矩阵计算 &#x1f4ab;不规则二维数组实战演练&#xff1a;杨辉三角形 概述 ⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的&#xff0c;它们在内存中按照这个先后顺…

【ProtoBuf】通讯录实现(网络版)

Protobuf 还常用于通讯协议、服务端数据交换场景。那么在这个示例中&#xff0c;我们将实现一个网络版本的通讯录&#xff0c;模拟实现客户端与服务端的交互&#xff0c;通过 Protobuf 来实现各端之间的协议序列化。 需求如下&#xff1a; 客户端可以选择对通讯录进行以下操…

电脑文件恢复哪个好?分享四个建议记住常备的方法!

当我们发现电脑误删文件的时候&#xff0c;一定会感到焦虑和困惑&#xff0c;但是一味地焦虑和困惑是没有任何帮助的。我们需要保持冷静&#xff0c;然后通过以下几个方法找回。 电脑文件恢复的方法有很多&#xff0c;选对适合自己的数据恢复软件很重要&#xff0c;本文罗列了几…

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini

GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%&#xff0c;其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放&#xff0c;并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…

Linux——五种IO模型

目录 一、I/O的理解 二、五种IO模型 1.阻塞式IO 2.非阻塞式IO 3.信号驱动IO 4.多路复用IO 5.异步IO 一、I/O的理解 I/O的本质就是输入输出&#xff0c;C语言的stdio&#xff0c;C的iostream&#xff0c;添加了这两个库&#xff0c;我们才能够进行printf、scanf、cin、c…

UDP网口(1)概述

文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例&#xff0c;介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…

人工智能AI合集:1、嵌入式LinuxAI开发套件OrangePI AIPRO初体验

前言 随着人工智能技术的飞速发展&#xff0c;AI已经不再是遥不可及的高科技概念&#xff0c;而是逐渐融入到我们的日常生活中。从智能手机的语音助手到家庭中的智能音箱&#xff0c;再到工业自动化和医疗诊断&#xff0c;AI的应用无处不在。然而&#xff0c;要想真正掌握并应用…

数学建模学习(111):改进遗传算法(引入模拟退火、轮盘赌和网格搜索)求解JSP问题

文章目录 一、车间调度问题1.1目前处理方法1.2简单案例 二、基于改进遗传算法求解车间调度2.1车间调度背景介绍2.2遗传算法介绍2.2.1基本流程2.2.2遗传算法的基本操作和公式2.2.3遗传算法的优势2.2.4遗传算法的不足 2.3讲解本文思路及代码2.4算法执行结果&#xff1a; 三、本文…