一、数据结构

Python中存在三种重要的数据结构,即列表、元组和字典,下面将一一介绍这三种数据结构。

列表:

列表是处理一组有序项目的数据结构,每个项目之间用逗号隔开,列表中的项目应该包括在方括号中。一旦创建了列表,就可以往列表中添加、删除和搜索其中的项目。添加项目可以通过append方法实现,删除项目可以通过del函数实现,搜索项目可以使用索引的方法。

例子:

In [1]:

...:


In [2]:

['Monday', 'Tueaday', 'Wednesday', 'Thursday', 'Friday', 'Saturdat']


In [3]:

...: ls.append('Sunday')

...:

...:

['Monday', 'Tueaday', 'Wednesday', 'Thursday', 'Friday', 'Saturdat', 'Sunday']

需要注意的是,append方法每次只能往列表中加入一个项目。


In [4]:

...:

...:

...:

...:

A week has 7 days, there are:

Monday

Tueaday

Wednesday

Thursday

Friday

Saturdat

Sunday


In [5]:

...:


In [6]:

['Tueaday', 'Wednesday', 'Thursday', 'Friday', 'Saturdat', 'Sunday']

列表中的内容增值可减,其属于可变的数据结构类型。

列表的容忍度非常高,可以装下很多种东西,如列表中可以放置任何数据类型,如字符串、数值、列表、元组、字典等。

In [7]:

...:

...:

['LiuShunxiang', 26, ['Male', 'DA', 1], (1, 2, 3), {'Friend': 'xxx'}]


元组

元组与列表类似,其不同之处在于元组是不可变的数据结构类型,无法实现往元组中增加或减少元素。元组通过圆括号将元素组合在一起,中间用逗号隔开。

例子:

In [9]:

...:

...:

('1a', '2b', '3c', '4d', '5e', '6f', '7g')


元组最普遍的用法是与转义字符一起使用

In [10]: print ' Name: %s Gender: %s Age: %d\n Score: %.2f'%('LiuShunxiang\n','Male\n',26,89.736)

Name: LiuShunxiang

Gender: Male

Age: 26

Score: 89.74

其中,\n为转义字符,表示换行;%s、%d%.2f表示数据类型,分别为字符型、整数型和浮点型,且浮点型数据保留2位。


字典

字典的本质就是将多个项目对紧紧的联系在一起,正如身份证号对应一个人,Python的术语将“身份证”命名为键,“人”命名为值。这里需要强调的是,键必须是唯一的,而值可以是重复的。字典的写法如下:

{key1:value1,key2:value2,...,keyn:valuen}

键与值之间用冒号隔开,多个键值之间用逗号隔开,他们用花括号括起来。字典也可以添加或删除键值,其为可变的数据结构类型。

例子:

In [11]:

...:

...:

{'id4': 'def', 'id2': 'bcd', 'id3': 'cde', 'id1': 'abc'}

字典不像列表和元组可以通过索引获取指定位置的值,而字典只能够通过指定键才能返回对应的值。

In [12]:

id1's name is: abc


或者

In [13]:

id3's name is cde


添加键值

In [14]:

...:

...:

{'id4': 'def', 'id5': 'LiuShunxiang', 'id2': 'bcd', 'id3': 'cde', 'id1': 'abc'}

字典中不存在顺序,其不属于序列,所以新添加的键值没有放在当前字典的最后一个。


删除键值

In [15]: del MemInfo['id2']

...:

...:

{'id4': 'def', 'id5': 'LiuShunxiang', 'id3': 'cde', 'id1': 'abc'}


通过字典的items方法可将每一对键值以元组的形式存放在列表中。

In [16]:

Out[16]:


可通过for循环把对应的键值打印出来。

In [17]:

...:

...:

id4 def

id5 LiuShunxiang

id3 cde

id1 abc


或者

In [18]:

...:

...:

ID is:id4, Name is:def

ID is:id5, Name is:LiuShunxiang

ID is:id3, Name is:cde

ID is:id1, Name is:abc


二、切片

我们知道,字符串、列表和元组都是序列,即他们都是有顺序的,这样就可以根据这些序列的索引取出一个项目或使用切片取出连续的一组项目,这里就以字符串为例。

需要指出的是,Python索引从0开始,这不同于R语言从1开始,而且取不到切片的上限,下面以例子说明问题。

In [19]:

...:

...:

LiuShunxiang


取出第一个字符

In [20]:

L


取出最后一个字符

In [21]:

...:

...:

...:

12

g


取出'Liu'

In [22]:

Li

发现并没有取全,是因为切片的上限2取不到,只能取到1的位置。


In [23]:

Liu


或者

In [24]:

Liu


取出'xiang'

In [25]:

xiang


或者

In [26]:

xiang

但这样有些复杂,需要从头开始数,如果字符串很长的话,数起来就麻烦了。可以考虑从后往前取。

In [27]:

xian

仍然没有取全,因为-5的位置取不到,只取到了倒数第二个位置。


In [28]:

xiang

上面的切片有一个规律,即切片的第一个值小于第二个值,如果大于等于第二个值呢?

In [29]:

...:

...:



发现不返回任何结果,且没有报错。其实切片有3个参数,即[start,end,step],默认情况下,step=1,所以print mystring[3:0]没有返回结果。

In [30]:

uiL

这样就能返回结果,但为逆序结果,如果想使结果再次颠倒一下,可以再原来的结果中再使用[-1::-1 ]切片


In [31]:

...:

...:

Liu

xiang

下期预告

常用的字符函数和数学函数