
3.4 Python的基本数据结构
Python的基本数据结构包括列表(List)、元组(Tuple)、集合(Set)、字典(Dict)这些数据结构表示数据在Python中的存储形式。在Python中,我们可以输入type(对象)查看数据结构。
3.4.1 列表
1. 列表简介
列表是Python内置的数据类型,是一种有序的集合,用来存储一连串元素。列表用[]表示,其中的元素类型可不相同。例如:
>list1 = [1,'2',3,4] >list1 [1,'2',3,4]
除了使用[]表示列表外,我们还可以使用list函数。
>list([1,2,3]) [1, 2, 3] >list('abc') ['a', 'b', 'c']
可以通过索引访问或修改列表中相应位置的元素。使用索引时,通过[]来指定位置。在Python中,索引的起始位置为0,例如取list1第1个位置的元素:
>list1[0] 1
可以通过“:”符号选取指定列表中相应位置的元素,例如取第1到第3个位置的元素。注意,这种索引取数是前包后不包的(包括0位置,但不包括3位置,即取0、1、2位置的元素):
>list1[0:3] [1, '2', 3]
此外,Python中的负索引表示倒序位置,例如-1代表list1最后一个位置的元素:
>list1[-1] 4
列表支持加法运算,表示两个或多个列表合并为一个列表,如下所示:
>[1,2,3]+[4,5,6] [1, 2, 3, 4, 5, 6]
2. 列表对象中内置的方法
在Python中,列表对象中内置了一些方法。这里介绍append方法和extend方法。append方法表示在现有列表中添加一个元素。在循环控制语句中,append方法使用较多,示例如下:
> list2 = [1,2] > list2.append(3) > list2 [1 ,2 ,3]
extend方法类似于列表加法运算,表示合并两个列表为一个列表,示例如下:
> list2 = [1,2] > list2.extend([3,4,5]) > list2 [1, 2, 3, 4,5]
3.4.2 元组
元组与列表类似,区别在于在列表中,任意元素可以通过索引进行修改。而在元组中,元素不可更改,只能读取。下面展示了元组和列表的区别。我们可以对列表进行赋值,而同样的操作应用于元组则会报错。
>list0 = [1,2,3] > tuple0 = (1,2,3) > list0[1] = 'a' > list0 [1, 'a', 3] > tuple0[1] = 'a' TypeError Traceback (most recent call last) <iPython-input-35-2bfd4f0eedf9> in <module>() ----> 1 tuple0[1] = 'a' TypeError: 'tuple' object does not support item assignment
这里通过“()”表示元组。在Python中,元组类对象一旦定义则无法修改,但支持加运算,即合并元组。
>(1,2,3)+(4,5,6) (1, 2, 3, 4, 5, 6)
元组也支持像列表那样通过索引访问元素。
>t1 = (1,2,3) > t1[0] 1 > t1[0:2] (1,2)
3.4.3 集合
在Python中,集合是一组key的集合,且key不能重复。我们可以通过列表、字典或字符串等创建集合,或通过“{}”表示创建,示例如下:
>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} >basket {'apple', 'banana', 'orange', 'pear'} >basket = set(['apple', 'orange', 'apple', 'pear', 'orange', 'banana']) > basket {'apple', 'banana', 'orange', 'pear'} > basket = set(('apple', 'orange', 'apple', 'pear', 'orange', 'banana')) > basket {'apple', 'banana', 'orange', 'pear'}
Python支持数学意义上的集合运算,比如差集、交集、补集、并集等,例如:
>A = {1,2,3} >B = {3,4,5}
A、B的差集,即去除集合A中集合A、B共有的元素:
>A – B {1, 2}
A、B的并集,即集合A与集合B的全部唯一元素:
>A | B {1, 2, 3, 4, 5}
A、B的交集,即集合A和集合B共有的元素:
>A & B {3}
A、B的对称差,即集合A与集合B的全部唯一元素去除集合A与集合B的共有元素:
>A ^ B {1,2,4,5}
需要注意,集合不支持通过索引访问指定元素。
3.4.4 字典
Python中内置了字典(在其他语言中也称为Map),其使用键-值(key-value)存储,以便提高查找速度。其格式是用大括号“{}”括起来,其中key和value用冒号“:”进行分隔,示例如下:
>dict1 = {'Nick':28,'Lily':28,'Mark':24} > dict1 {'Lily': 28, 'Mark': 24, 'Nick': 28}
字典本身是无序的,我们可以通过方法keys和values提取键-值对中的键和值,如下所示:
>dict1.keys() ['Nick', 'Lily', 'Mark'] > dict1.values() [28, 28, 24]
字典支持按照键访问相应的值,如下所示:
>dict1['Lily'] 28
这里需要注意定义字典时,键不能重复,否则重复的键值会替代原先的键值。如下示例中,键‘Lily’重复,其值被替换。
>dict3 = {'Nick':28,'Lily':28,'Mark':24,'Lily':33} {'Lily': 33, 'Mark': 24, 'Nick': 28}