凌天剑尊免费阅读:初识Python(三)

来源:百度文库 编辑:中财网 时间:2024/05/05 12:13:48

数据结构

数据结构基本上就是——它们是可以处理一些 数据 的 结构 。或者说,它们是用来存储一组相关数据的。

在Python中有三种内建的数据结构——列表、元组和字典。我们将会学习如何使用它们,以及它们如何使编程变得简单。

列表

list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目。假想你有一个购物列表,上面记载着你要买的东西,你就容易理解列表了。只不过在你的购物表上,可能每样东西都独自占有一行,而在Python中,你在每个项目之间用逗号分割。

列表中的项目应该包括在方括号中,这样Python就知道你是在指明一个列表。一旦你创建了一个列表,你可以添加、删除或是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是 可变的 数据类型,即这种类型是可以被改变的。

列表是使用对象和类的一个例子。

类也有方法,即仅仅为类而定义地函数。仅仅在你有一个该类的对象的时候,你才可以使用这些功能。例如,Python为list类提供了append方法,这个方法让你在列表尾添加一个项目。例如mylist.append('an item')列表mylist中增加那个字符串。

类也有,它是仅仅为类而定义的变量。仅仅在你有一个该类的对象的时候,你才可以使用这些变量/名称。类也通过点号使用,例如mylist.field

>>> mylist=['apple','mango','banana']

>>> for i in mylist:

print i

apple

mango

banana

>>> mylist.append('rice')

>>> print mylist[3]

rice

>>> del mylist[1]  我们使用del语句为我们从列表中删除它

>>> for i in mylist:

print i

apple

banana

rice

>>> mylist.sort() 列表的sort方法对列表排序,这个方法影响列表本身而不是返回一个修改后的列表,这就是我们所说的列表是可变的而字符串是不可变的

>>> for i in mylist:

print i

apple

banana

rice

如果你想要知道列表对象定义的所有方法,可以通过help(list)获得完整的知识。

>>> help(list)

Help on class list in module __builtin__:

元组

元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。

>>> zoo=('1','2','3')

>>> new_zoo=(zoo,'4','5')

>>> print len(new_zoo)

3

>>> print new_zoo

(('1', '2', '3'), '4', '5')

>>> print zoo[2]

3

>>> print new_zoo[0][1]

2

含有0个或1个项目的元组。一个空的元组由一对空的圆括号组成,如myempty = ()。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象。即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , )

元组最通常的用法是用在打印语句中,下面是一个例子:

>>> name='michael'

>>> age=12

>>> print '%s\'s age is %d'%(name,age)

michael's age is 12

print语句可以使用跟着%符号的项目元组的字符串。这些字符串具备定制的功能。定制让输出满足某种特定的格式。定制可以是%s表示字符串或%d表示整数。元组必须按照相同的顺序来对应这些定制。

字典

字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把(名字)和(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。

注意,你只能使用不可变的对象(比如字符串)来作为字典的键

键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }

字典是dict类的实例/对象

>>> contact={'liu':'33','xue':'22','wang':'44'}

>>> print "liu's age is",contact['liu']

liu's age is 33

>>> contact['li']='55'     添加一个键值对

>>> del contact['xue']     删除一个键值对

>>> for name,age in contact.items():  字典的items方法会返回一个元组的列表,其中每个元组都包含一对项目——键与对应的值

print "%s is %s"%(name,age)

liu is 33

li is 55

wang is 44

我们可以使用in操作符来检验一个键/值对是否存在,或者使用dict类的has_key方法。

>>> if 'liu' in contact:

print "liu is",contact['liu']

liu is 33

序列

列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。

索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。因此,shoplist[-1]表示序列的最后一个元素而shoplist[-2]抓取序列的倒数第二个项目。

>>> shoplist=['apple','mango','carrot','banana']

>>> print shoplist[-1]

banana

>>> print shoplist[-2]

carrot

切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。注意这与你使用的索引操作符十分相似。记住数是可选的,而冒号是必须的。

切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置 开始 ,刚好在 结束 位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。

>>> print shoplist[:]    shoplist[:]返回整个序列的拷贝。

['apple', 'mango', 'carrot', 'banana']

>>> print shoplist[1:3]

['mango', 'carrot']

你可以用负数做切片。负数用在从序列尾开始计算的位置。例如,shoplist[:-1]会返回除了最后一个项目外包含所有项目的序列切片。

>>> print shoplist[:-1]

['apple', 'mango', 'carrot']

同样可以操作与字符串

>>> name='abcdefg'

>>> print name[:-1]

abcdef

参考

当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定

>>> a=[1,2,3,4]

>>> b=a

>>> del a[0]

>>> print a

[2, 3, 4]

>>> print b

[2, 3, 4]

>>> b=a[:-1]   列表的赋值语句不创建拷贝。你得使用切片操作符来建立序列的拷贝。

>>> print b

[2, 3]

更多字符串的内容

字符串也是对象,同样具有方法。这些方法可以完成包括检验一部分字符串和去除空格在内的各种工作。字符串都是str类的对象 help(str)

>>> str='abcdefgh'

>>> if str.startswith('abc'):

print 'yes'

yes

>>> if str.find('cd')!=-1:

print 'yes'

yes

>>> if 'h' in str:

print 'yes'

str类也有以一个作为分隔符的字符串join字符串序列的项目的整洁的方法,它返回一个生成的大字符串。

>>> delimiter='|'

>>> list=['1','2','3','4']

>>> delimiter.join(list)

'1|2|3|4'