Python的序列类型

2020-08-29 10:48:00
六月
来源:
https://www.cnblogs.com/forwardfeilds/p/10451794.html
转贴 670

Python的序列类型非常丰富,包括了列表(list),元组(tuple),字符串(str), 字节数组(bytes),队列(deque),今天我们了解下python中的这些内置序列类型。

内置序列类型介绍:

python标准库中的序列类型使用C语言实现,大体上可分为下面几类。

容器序列   list、tuple、collections.deque等,能存放不同类型的数据

扁平序列   str、bytes、bytearray、memoryview(内存视图)、array.array等,存放的是相同类型的数据

容器序列和扁平序列有什么不同呢?

容器序列存放的实际上是对象的引用,因此可以存放不同类型的数据;扁平序列存放的是对象的值,是一段连续的内存空间,因此要求对象必须是相同类型的数据才行,如字符、数字、字节。

当然,序列类型也可以按照 能否被修改来分类。

Python 可变序列和不可变序列

可变序列:值变了,地址不一定变

不可变序列:值变了,地址一定变

也就是说,可变序列可以在不改变地址的前提下改变自身存储的内容。而不可变序列只能通过改变自己地址(指针指向新的地址),来达到改变自己存储的内容的目的。

可变序列要想改变自己,只需要在原本的基础上改变就可以,而不可变序列想要改变自己,就只能找一块新的地方重新开始。

可变序列  list、bytearray、array.array、collections.deque、memoryview。

不可变序列 tuple、str、bytes。

元组

元组常常又被称为“不可变列表”,的确如此,但除此之后,元组还具有字段记录的功能。这一点常常被人忽略,没有引起足够的重视。

元组和记录

元组也是对数据的记录,元组中的每个元素都有相应的意义。

元组拆包

可以使用平行赋值的方式对元组进行拆包

#元组拆包

city, population, country = ('beijing', 20000000, 'China')

print(city, population, country)

具名元组

还记得上面的扑克牌的例子吗?有的时候,我们还想要对元组里的字段进行命名,而collections.namedtuple恰恰就是为此而生的。

那么如何使用具名元组呢?

from collections import namedtuple

1 City = namedtuple('City', ('name', 'country', 'population', 'location'))

2 beijing = City('beijing', 'China', 1300000000, (35, 120))

3 print(beijing)

4 print(beijing.name, beijing.country, beijing[3])

切片

列表、元组、字符串都支持切片操作。

切片为什么要忽略最后一个元素

python的绝大部分包含区间范围的方法中都是默认忽略最后一个元素的,例如range(10)会忽略最后的元素10,在其他编程语言中也如此。这样做的好处也是显而易见的。

1、切片只包含最后一个元素时,很方便的就可以知道元素的数量,如mylist[:3]有3个元素

2、切片包含start和end两个时,元素数量就是end-start

3、可以很方便的把序列分成互不重叠的两部分 list[:x], list[x:]

对象进行切片操作

1 s = 'bicycle'

2 print(s[:3])#'bic'

3 print(s[::-1])#反向取值 elcycib     (注意: 使用s[-1:-7:-1]得到'elcyci', 使用s[0:-7:-1]得到'')

4 print(s[::-2])#反向取值,步长为2 eccb


发表评论
评论通过审核后显示。