北大博士Python学习笔记零基础小白入门Python必会的数据类型详解

数据类型

在python这门语言中,数据类型分为两种。 内置的和自定义的。

内置的包括数字、字符串、布尔、列表、元组、字典、Bytes、集合这些常用的以及一些不太常用的数据类型。 而自定义的,一般以类的形式,根据需要组合以上内置类型成为独特的数据类型。

数据类型是Python语言非常重要的部分(哪部分不重要?),尤其是不同数据类型所支持的原生操作,更是重中 之重,需要熟练的背在脑海里。很多时候,写大型项目时,不需要你多复杂的技巧,只需要用这些数据操作方法 就可以。

原因之一,更好的分配管理内存,节省不必要的开支。如果没有数据类型的区别,那么所有的对象都必须按体积最 大的对象所必须大小的房子分配空间,也就是内存空间,这样的浪费太严重了。

有了数据类型,计算机就可以根 据类型预定义的空间需求分配大小,合理开支。内存节省精简了,还能提高读取速度和运行效率。

原因之二,方便统一管理,提供同样的API。这样,我们可以为同一数据类型,提供同样的操作,限制其它不允 许的行为。也易于查找错误,定位问题。

原因之三,区分数据类型,更贴切人类对自然事物的分类管理习惯。我们人类对事物都进行了各种分类,植物是 植物、动物是动物,书是书,笔是笔。分类了之后,我们很自然的知道书可以读,笔可以写。数据类型也一样, 让我们对抽象的数据有了可分辨的行为和自然的记忆。

  • 数字
  • 字符串
  • 布尔
  • 列表
  • 元组
  • 字典
  • bytes

点击获取全套Python零基础资料

数字类型

数字类型是不可变类型。所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象。数字 1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象。

还是要强调一下Python的变量和数据类型的关系,变量只是对某个对象的引用或者说代号、名字、调用等等,变 量本身没有数据类型的概念 。只有1,[1,2],"hello"这一类对象才具有数据类型的概念。 Python 支持三种不同的数字类型,整数、浮点数和复数。

整数

通常被称为整型,数值为正或者负,不带小数点。python 3的整型可以当做Long类型使用,所以python 3 没有 python 2的Long类型。

表示数字的时候,有时我们还会用八进制或十六进制来表示:

十六进制用0x前缀和0-9,a-f表示,例如:0xff00

八进制用0o前缀和0-7表示,例如0o45

python的整数长度为16,32位,并且通常是连续分配内存空间的。

id(-2) 
505205760 
id(-1) 
505205776

从上面的空间地址看,地址之间正好差16,32。

小整数对象池

python初始化的时候会自动建立一个小整数对象池,方便我们调用,避免后期重复生成!这是一个包含262个指 向整数对象的指针数组,范围是-5到256。也就是说比如整数10,即使我们在程序里没有创建它,其实在Python后台已经悄悄为我们创建了。

为什么要这样呢?我们都知道,在程序运行时,包括Python后台自己的运行环境中,会频繁使用这一范围内的整 数,如果每需要一个,你就创建一个,那么无疑会增加很多开销。创建一个一直存在,永不销毁,随用随拿的小 整数对象池,无疑是个比较实惠的做法。

id(-6) 
10114720 
id(-5) 
496751568 
id(255) 
496755728

从id(-6)和id(257)的地址,我们能看出小整数对象池的范围,正好是-5到256。

除了小整数对象池,Python还有整数缓冲区的概念,也就是刚被删除的整数,不会被真正立刻删除回收,而是在 后台缓冲一段时间,等待下一次的可能调用。

a = 100 
id(a) 
503175776 
del a # 删除变量a 
b = 100 
id(b) 503175776 

a = 10;print(id(a));del a;b = 10;print(id(b)) # 在Python交互环境中不能实现。

上面,我给变量a赋值了整数100,看了一下它的内存地址。然后我把a删了,又创建个新变量b,依然赋值为 100,再次看下b的内存地址,和以前a存在的是一样的。

点击获取全套Python零基础资料

浮点数

浮点数也就是小数,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,一般用科学计数法表示,把 10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等

复数(complex)

复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点。

数字类型转换

在某些特定的情况下,我们需要对数字的类型进行转换。python为我们提供了内置的数据类型转换函数。

int(x)             将x转换为一个整数。如果x是一个浮点数,则截取小数部分
float(x)          将x转换成一个浮点数 
complex(x)   将x转换到一个复数,实数部分为 x,虚数部分为 0complex(x, y): 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。

在这里插入图片描述
转换过程中如果出现无法转换的对象,则会抛出异常,比如int(“haha”)

数学计算

对于数学计算,除了前面提到过的简单的加减乘除等等,更多的科学计算需要导入 math 这个库,它包含了绝 大多数我们可能需要的科学计算函数,如下表:

在这里插入图片描述
在这里插入图片描述

布尔类型

对于错、0和1、正与反,都是传统意义上的布尔类型。

但在Python语言中,布尔类型只有两个值,True与False。请注意,是英文单词的对与错,并且首字母要大写, 不能其它花式变型。

布尔值通常用来判断条件是否成立。 例如:

a = 1 
if a > 3:
    print("a是一个大于3的数字")
else:
    print("a不是一个大于3的数字")

Python内置的 bool() 函数可以用来测试一个表达式的布尔值结果。

在这里插入图片描述
这里需要注意的是,3 is “3” 为什么是False呢?一个是整数一个是字符串。is是运算符比较的是对象,当然是错误的。

>>> bool(1) 
True 
>>> bool(0)
False 
>>> bool([]) 
False 
>>> bool(()) 
False 
>>> bool({}) 
False 
>>> bool(-1) 
True 
>>> bool('') 
False 
>>> bool("False") 
True 
>>> bool("True") 
True 
>>> bool(0.0) 
False
>>> bool(1.0) 
True 
>>> bool(-0.0) 
False 
00.0-0.0、空字符串、空列表、空元组、空字典,这些都被判定为False。而-1"False"也被判断 为True。 布尔类型可以进行andornot

布尔类型可以进行and、or和not运算

and运算是与运算,只有所有都为True,and运算的结果才是True:

>>> True and True 
True 
>>> True and False 
False 
>>> False and False 
False 
>>> 5 > 3 and 3 > 1 
True

or运算是或运算,只要其中有一个为True,or运算结果就是True:

>>> True or True 
True 
>>> True or False 
True 
>>> False or False 
False 
>>> 5 > 3 or 1 > 3 True

not运算是非运算,它是单目运算符,把True变成False,False变成True:

>>> not True 
False 
>>> not False 
True 
>>> not 1 > 2 
True

布尔类型还能做别的运算吗?

>>> True > False 
True
>>> True < False 
False
>>> True >=False 
True
>>> True -1 
0
>>> True + 1 
2
>>> True *3 
3
>>> False -1 
-1

并且在做四则运算的时候,明显把True看做1,False看做0。

空值

空值不是布尔类型,严格的来说放在这里是不合适的,只不过和布尔关系比较紧密。

空值是Python里一个特殊的值,用None表示(首字母大写)。None不能理解为0,因为0是整数类型,而None 是一个特殊的值。None也不是布尔类型,而是NoneType。

>>> bool(None) 
False 
>>> type(None) 
<class 'NoneType'>

列表

列表是Python中最基本也是最常用的数据结构之一。列表中的每个元素都被分配一个数字作为索引,用来表示该 元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推。

Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。 从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。

对于这个列表 alist = [1, “a”, [11,22], {“k1”:”v1”}],其在内存内的存储方式是这样的:

在这里插入图片描述

创建方式

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

['1',2,'hello'] # 列表 
('1',2,'hello') # 元组 
{'1',2,'hello'} # 集合 
{'name':'juran','age':18} 

for i in ['1',2,'hello']:
    print(i)
# 通过查看源码来看创建的方法 
l = list(['1',2,'hello']) 
print(l)

l = [1, 2, 3] 
l1 = [1, 'hello', 1.2] 
print(l1) 
------------------------------------------------- 
list = []       # 定义空列表
list1 = ['physics', 1997, 2000] 
list2 = [1, 2, 3] 
list3 = ["a", "b", "c"]

访问列表内的元素

列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一 。要访问它的某个元素,以方括号加下标值 的方式即可。注意要确保索引不越界,一旦访问的 索引超过范围,会抛出异常。所以,一定要记得最后一个元素 的索引是len(list)-1。

>>> lis = ["a", "b", "c"] 
>>> lis[0] 
'a'
>>> lis[1] 
'b' 
>>> lis[2] 
'c' 
>>> lis[3]
Traceback (most recent call last): 
  File "<pyshell#7>", line 1, in <module>
    lis[3] 
IndexError: list index out of range

修改元素的值

直接对元素进行重新赋值。

>>> lis[0] 
'a' 
>>> lis[0] = "d" 
>>> lis[0] 
'd'

删除元素

使用del语句或者remove(),pop()方法删除指定的元素。

>>> lis = ["a", "b", "c"] 
>>> del lis[0]      # 根据索引删除 
>>> lis 
['b', 'c']
>>> lis.remove("b") # 直接根据值进行删除 
>>> lis 
['c']
>>> lis.pop()       # 弹出最后一个
'c' 
>>> lis 
[]

l1 = [1, 'hello', 1]

l2 = l1.pop(1) # 根据索引来弹出 1为索引 
print(l2)

列表的特殊操作

在这里插入图片描述

列表的常用函数

在这里插入图片描述
在这里插入图片描述

排序和反转

在这里插入图片描述

切片–也叫截取

切片指的是对序列进行截取,选取序列中的某一段。

切片的语法是:

list[start:end]

以冒号分割索引,start代表起点索引,end代表结束点索引。省略start表示以0开始,省略end表示到列表的结 尾。注意,区间是左闭右开的!

如果提供的是负整数下标,则从列表的最后开始往头部查找。例如-1表示最后一个元素,-3表示倒数第三个元 素。

切片过程中还可以设置步长,以第二个冒号分割,例如list[3:9:2],表示每隔多少距离取一个元素。

在这里插入图片描述

多维列表(嵌套列表)

a = [[1,2,3],[4,5,6],[7,8,9]] 
a[0][1] 
2
a = [[1,2,3],[4,5,6],{"k1":"v1"}] 
a[2]["k1"] 
v1

列表的遍历

列表有好几种遍历方式:

在这里插入图片描述

列表的内置方法

在这里插入图片描述
注意:其中的类似 append,insert, remove 等方法会修改列表本身,并且没有返回值(严格的说是返回 None)。

点击获取全套Python零基础资料

最后

人生苦短,Python当歌!!!

原创不易,严禁抄袭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值