金融商业数据分析:基于Python和SAS
上QQ阅读APP看书,第一时间看更新

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}