pyhon中,有一种东西叫做容器,当然不仅仅是python,几乎所有的语言都有容器一说。
那么,什么又是容器呢?
在小白基础(1)中,我有提及过 变量 (详情:juejin.im/post/684490…),这里说的变量,实际上就属于容器的一种,用来存储特定的数据。
在python中,除了变量,还有其他一些比较常用的容器,这些容器,有对应的数据类型,请听小码农细细道来。
Python有六个标准的数据类型:
Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
开始之前,先提两个BIF (Built-in Functions,内置函数):
一个是type(obj),一个是isinstance(obj,type)。
type(obj),这个函数的作用,就是判断数据类型用的。obj表示要判断的对象。看下边的代码:
# 数字类型
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
# 输出结果:
# 其他类型
>>> e, f, g, h, i,j = "小码农", [1,2,3], (4,5,6),{'a','b','c'}, {'d':1, 'e':'2', 'f':[1,2]}
>>> print(type(e), type(f), type(g), type(h), type(i))
# 输出结果:
复制代码
从代码中也可以看出,根据type(obj)函数得出的数据类型,就是我们这片文章要介绍的东西啦。这段代码看不明白暂时没关系,看完这片文章再回头看,估计就会明白了。
至于isinstance(obj,type),功能类似,不过接收2个参数,第一个参数表示要判断的对象,第二个参数接收判断的类型。这个函数用来判断某个对象是否是指定类型的子类,是则返回True,否则返回False。又举个栗子:
>>> a = 123
>>> isinstance(a, int)
# 输出结果:
True
>>> isinstance(a,str)
# 输出结果:
False
复制代码
Number(数字)
Python3 支持 int、float、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。童鞋们当概念记一下就好。
int(整型)、float(浮点型)
emm,直白点说,就是整数、小数。在python中,是直接以数字形式写的。
>>> a = 1
>>> b = 1.78
复制代码
注意哦,这里的赋值,1和1.78是赤赤裸裸滴,没有引号哦,如果说这样
>>> a = "1"
>>> b = '1.78'
复制代码
程序会认为你给a和b两个变量是用字符串赋值的而不是数字。
bool(布尔值)
布尔值,其实就是特殊的数字,0是布尔值假False,1是布尔值真True
>>> bool(1)
True
>>> bool(0)
False
复制代码
在这里,其实善于动手的童鞋会发现,只要数字不是0 ,那么反回的布尔值都是True。emm...这里当个概念眼熟一下就好了,后面学习用多了,也就理解了。
复数(complex)
说实话就是那种类似1+2j,1的部分是实部,2j的部分叫做虚部,(原谅我这玩意是干嘛的我也不知道,小学数学是体育老师教的...)这部分自动跳过了~
另外,python中的容器也可以分为 有序容器 和 无序容器(个人理解,有错还望指出)。
有序容器,在我的理解,就是说这个容器内存储的数据是按顺序存放的,我们可以通过下标的方法访问到容器内的制定数据。
反之,无序容器中存储的数据就不按套路出牌了,也就是没办法用下标的方式访问数据。
有序容器
有序容器,在python中也可以叫做序列,序列包括字符串(String)、列表(List)、元组(Tuple)。也就是说,这三种数据,是可以通过下标的方式直接访问存储在容器中的数据的,举个栗子:
# 字符串
>>> str1 = 'Hello World!'
# 列表
>>> list1 = [1,2,3,4]
# 元组
>>> tuple1 = (1,2,3)
# 打印输出
>>> print(str1[0],list1[1],tuple1[2])
# 输出结果:
H 2 3
复制代码
从上面的例子,展示了字符串、列表和元组及其定义方法(下面会逐一进行介绍)。他们的访问方式就是直接以下标方式访问,如str1[0],表示Hello World!的第一个元素也就是H,对应list1[1]获取列表的第二个元素,tuple1[2]获取元组的第三个元素。
此处插播一个知识点:
基本上大多数编程语言,其下标都是规定从0开始的,而不是我们认知的从1开始,接着才是1,2,3,4,5……。因此字符串str1[0]表示的是第一个元素,也就是Hello World!中的H。列表和元组同理。
还有个特殊的,就是负数。负数下标,表示的是从序列末端开始倒数,如-1表示最后一个元素,-2表示倒数第二个元素,以此类推。
String(字符串)
字符串,其实就是用引号包裹起来的东西,比如说
'abcd'
"efg"
'''ABCD'''
"""EFG"""
复制代码
这几个,都叫做字符串,字符串在编程中是灰常常用的,因此有很多字符串相关的BIF,童鞋们可以自行动手,搜索引擎是个好东西。也可以参阅www.w3cschool.cn/python/pyth…
List(列表)
列表,就是存储数据的一串东西,大致可以这么理解吧。里边呢,可以放字符串,数字、元组,当然也可以继续放一个列表(类似列表里放列表,这种在同类型的东西里边放个同类型的东西(暂且这么理解),这种方式有个特殊的名字,叫做嵌套)。
List(列表) 这玩意应该是 Python 中使用最频繁的数据类型了吧。
# 定义一个空列表
>>> list1 = []
# 定义一个装很多东西的列表
>>> list2 = [1,'Hello world!',(1,2,3),[4,5,6]]
复制代码
没看错,万物皆可盘~
另外,list(列表)是可以任君修改的哟,比如这样:
>>> list1 = [1,2,3,4]
>>> list1[0] = 100
>>> print(list1)
# 输出结果:
[100, 2, 3, 4]
复制代码
正如所见,代码中将list1的第一个元素从1修改为了100,然后新的list1的值也对应的变更了。而诸如字符串、元组、集合、字典可没有这种骚操作,不信你自个试试。
Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号() 里,元素之间用英文逗(,)号隔开。
不过需要注意的是,当元组中只有一个元素的时候,逗号依然需要保留:
# 定义一个空元组
tuple1 = ()
# 定义一个只有一个元素的元组,逗号需要保留
tuple2 = (1,)
复制代码
注意事项
String(字符串)、List(列表) 和 Tuple(元组) 都属于 Sequence(序列)。
与字符串一样,元组的元素不能修改。
元组也可以被索引和切片,方法一样。
注意构造包含 0 或 1 个元素的元组的特殊语法规则。
元组也可以使用+操作符进行拼接。
引申
有童鞋会问了,上面提到过的切片,拼接又是什么??这部分,将对这两个知识点进行说明。
在此之前,我们初始化一下,分别用来举例。两个例子不在重复初始化定义。
# 定义字符串
str1 = 'Hello'
str2 = 'World'
# 定义元组
tuple1 = (1,2,3)
tuple2 = (4,5,6)
# 定义列表
list1 = [1,2,3]
list2 = [4,5,6]
复制代码切片
顾名思义,就是把某些东西切啊切成一片一片的。那么在python中,我们该如何来理解呢?在说明之前,再提一次,编程的序号是从0开始的,重点,要考! 那么,还是栗子说话:
>>> str1[0:1]
# 结果输出:
'H'
>>> str1[:1]
# 结果输出:
'H'
>>> str1[2:]
# 结果输出:
'llo'
>>> str1[:]
# 结果输出
'Hello'
复制代码
根据输出结果,细心的童鞋也可以看出来了。重点在于这个冒号(:)。这里列表、元组和字符串的切片操作都是一样的,这里拿字符串做例子,其他的童鞋们可以自行尝试。
结合代码,切片有以下的规则
[0:1]
冒号前的数字表示要切片的对象的初始下标,冒号右边的数字表示要切片的截止下标(但是不包含此下标对应的元素)。之前定义的str1 = 'Hello',从下标为0的元素开始,到下标为1截止,但是不包含下标为1的元素,因此就返回了字符串的第一个元素,也就是H。
[:1]
当冒号左边的数字省略不写时,表示默认从下标为0开始取值,到下标为1的元素位置,但不包含下标为1的元素,因此,str1[:1]返回的也是H。
[2:]
有同鞋问了,冒号左边可以省略,我冒号右边能不能省略?答案是,能。当省略冒号右边的数字,表示从左边指定的下标开始,截取到对象最后的所有元素。因此,str1[2:]表示的是从下标为2的元素开始,直到末尾,所以返回的结果是llo。
[:]
无独有偶,既然前可以省略,后可以省略,那我可不可以前后都省略?emm,答案是YES。当冒号前后数字都省略不填,表示获取对象所有的元素。也就是说,str1和str1[:]是等价的。因此str1[:]返回了整个字符串Hello。
拼接
都说破镜不能重圆,Python比较追求完美,所以呢,在Python中,某些东西,是可以重圆的,这就是我们接下来要说的拼接。
废话不多说,上栗子(初始化代码在前边,这不再重新初始化):
str1 + str2
# 结果输出
'Hello World'
tuple1 + tuple2
# 结果输出:
(1,2,3,4,5,6)
list1 + list2
# 结果输出:
[1,2,3,4,5,6]
复制代码
好嘛,显而易见,拼接,拼起来的意思。不过要注意的是,这个拼接符(+)左右两边的对象类型,要保持一致,也就是说,只能字符串和字符串拼接,列表和列表拼接,元组和元组拼接。达尔文的进化论也说啦,物种之间,是有生物隔离的,不是什么猪狗马牛都可以随便的凑一对你说是不是~
小结
这片文章主要讲解了数字相关和Python中的序列相关的内容,包括了字符串、列表和元组,及其相关的一些方法,如切片和拼接。
看再多,不如动手敲一下代码,验证一下自己所看所学。子曰:读万卷书,不如行万里路。下一篇,会写一些关于非序列的数据类型。
以上内容是本人结合网络和个人理解,如有错误,还请指出。共勉~