python高级数据类型

来源:互联网 发布:网络游戏端口号 编辑:程序博客网 时间:2024/06/05 10:22

4.1采用序列组合数据

字符串、列表和元组都是Python内置的序列数据类型。序列类型代表一组有序的数据元素,元素类型可为任意类型。

列表和元组的区别是可以更改。列表适于管理很多个项,元组适于管理一个项的不同部分。

4.1.1创建列表

用一个空的方括号即可。

>>> x=[] # an empty list

可以调用list(seq)函数,将一个序列类型转换为列表:

>>> list((5,10))

[5,10]

range([lower,]stop[,step])函数可以生成一个范围内指定值的列表,成员可以是连续的整数。

>>> range(10)

[0,1,2,3,4,5,6,7,8,9]

也可以指定其实索引和终止索引,还可以给出步长。常用于循环。

>>> range(20,2,-3)

[20,17,14,11,8,5]

  • 列表综合是Python2.0中新加入的特征,用于从已有列表创建新列表,并且使用过滤、计算等功能。

例如生成一个包含x的平方的列表,数字取值范围为1-10

>>> [x*x for x in range(1,11)]

[1,4,9,16,25,36,49,64,81,100]

>>> [x*x for x in range(10) if x % 2 == 0]

[0,4,16,36,64]

>>> [a+b for a in 'ABC' for b in '123']

['A1','A2','A3','B1','B2','B3','C1','C2','C3']

>>> [(x,ord(x)) for x in 'Ouch']

[('O',79),('u',117),('c',99),('h',104)]

4.1.2创建元组

同创建列表类似。x=()

由于圆括号也可以用于括起来表达式,(by gashero)所以可以用如下确定一个元组的声明:

>>> x=('lonely',)

转换成元组:

>>> tuple('tuple')

('t','u','p','l','e')

>>> tuple([1,2,3])

(1,2,3)


4.2处理序列

4.2.1采用算术运算符连接和重复

序列的加法用于连接,序列的乘法用于重复,后面乘一个整数。这些运算符的扩充赋值版本也起作用。

>>> q=(1,2)

>>> q+=(3,4)

>>> q

(1,2,3,4)

4.2.2比较和成员资格测试

普通的比较运算符< <= >= > == !=可以用于序列对象,比较序列的对应元素,直到能够做出决策为止。有元素总比一个不存在的元素大。

innot in运算符分别测试某个元素是否(by gashero)在列表或元组中。

4.2.3访问序列中的某部分

下标。用下标索引一个元素,第一个元素的索引是0

切片。允许从已有序列中提取子序列。用"序列[start:end]"格式指定一个切片,如果一个元素索引istart<=i<end,则会加入到切片中。负数索引是从末尾向前开始索引。startend都是可选的,默认时为开头和结尾。

解包。执行创建元组的逆操作。

>>> s=(801,435,804)

>>> x,y,z=s

>>> print x,y,z

801 435 804

注意左侧变量数目一定要与解包的序列长度匹配。

4.2.4采用for...in进行循环

常见的操作是循环处理列表或元组中的各个元素。

>>> for x in ['sin','cos','tan']

... print x

4.2.5使用序列实用程序函数

len(x)min(x[,y,z,...])max(x[,y,z,...])

这三个函数不是序列特定的,但是非常有用。取元素数量、最大值、最小值。

filter(function,list)

使用function函数过滤列表list,当list中的一个值代入function的结果为True时的一个值,直到把所有符合的元素全部取出形成一个列表返回。用于过滤列表元素。如果使用None作为function则会删除列表中的0或空项。

filter()的返回序列类型与传递的类型相同。

map(function,list[,list,...])

遍历原始列表中的每一个元素代入function函数,并将返回值组成列表,返回一个列表。如果function函数允许传入多个参数,也可以同时使用多个列表提供值。

如果提供的列表长度不同,则空位用None补齐。如果用None代替function则返回元素的合并元组。

>>> a=[1,2,3];b=[4,5,6];c=[7,8,9]

>>> map(None,a,b,c)

[(1,4,7),(2,5,8),(3,6,9)]

reduce(function,seq[,init]

先获取列表前两项,代入函数function,之后将返回值和下一个项再代入function,直到全部处理完成。

>>> import operator

>>> reduce(operator.mul,[2,3,4,5])

120 # 120=((2*3)*4)*5

第三个参数init用于作为第一项。

>>> reduce(lambda x,y: y+x+y, "Hello",'-')

'olleH-Hello'

zip(seq[,seq,...])

将两个或多个序列中的对应项合并成一个元组,并返回元组列表,当最短的一个序列完成时就不再进行合并了,并返回。

很方便于同时处理几个列表。从Python2.0开始提供。

>>> for name,ext,age in zip(names,exts,ages):

将一个序列传递给zip会以一元组的格式返回每个项:

>>> zip((1,2,3,4))

[(1,),(2,),(3,),(4,)]


4.3使用附加的列表对象特征

4.3.1附加运算

使用赋值替换列表中的一个值:todo=[...];todo[1]='..'。除了可以替换元素之外,甚至还可以替换整个切片。

可以用del x[n]来删除列表中一个元素或切片,其余的补齐。

4.3.2列表对象方法

append(obj)extend(obj)

都是用于再列表尾端继续添加元素,append()添加一个元素,extend()把参数作为一个列表,提取各个元素添加进去。

index(obj)

返回列表中第一个匹配项的索引,不存在时抛出ValueError异常。

>>> try:print x.index('famrer')

... except ValueError: print 'Not Found'

count(obj)

计算列表中与指定元素匹配的有多少个元素。字符串对象也包包含计数和索引的方法。

insert(j,obj)

在元素j之前插入新元素。如果j<=0则在开头添加,如果j大于列表长度则在列表尾部添加。

remove(obj)

在列表中查找obj并删除首个找到的元素。找不到则ValueError

pop([j])

指定索引j则删除指定位置元素并返回,如无索引则删除并返回最后一项。指定一个不存在的位置则IndexError

reverse()

将列表的顺序逆转。不进行排序,仅仅前后交换元素位置。

sort([func])

给列表元素排序,可选参数func提供排序的比较函数。

如果需要给排序列表添加或删除项,可以用bisect模块。使用insert(list,item)函数插入项时,就会使用平分算符轻易找到准确位置并插入,并保持列表的排序状态。同一模块中的bisect(list,item)函数用于找到准确的插入点,而并不插入元素。


4.4用词典映射信息

词典包含键/值对。键和值都可以任意取值。

4.4.1创建并添加到词典

通过在大括号中列出0个或多个键值对,可以创建词典。词典中使用的键必须是唯一的且不可变。

>>> logins{'yahoo':('join','jjj'),'hotmail':('trf','18th')}

>>> logins['hotmail']

('trf','18th')

4.4.2访问和更新词典映射

访问不存在的键时会抛出KeyError异常。如果不关心异常情况时,可以使用get(key[,obj])方法来替换,当映射不存在时就返回None,甚至可以指定默认值obj

setdefault(key[,obj])方法与get()的运行方式一样,也采用默认参数,只是当键值对不存在时会添加到词典中。存在则返回值,不存在的在添加之后也会返回值。

判断是否存在一个键,用has_key(key)方法,返回True/Flase

del用于删除词典中的项。

散列功能:一个对象拥有散列值,用于快速比较,如果两个对象都有散列值则无需直接比较,直接比较散列值即可。词典中使用散列的方法快速查询词典。使用hash(obj)函数可以查询对象的散列值。

>>> hash('hash')

-1671425852

>>> hash(10)

10

>>> hash(10.0)

10

>>> hash((1,2,3))

-821448277

在不可散列的对象之上会产生TypeError异常。

使用U

update(dict)方法将一个词典中所有的键值对添加到另一个词典中。

4.4.3附加的词典运算

len(dict)返回键值对的数量

dict.keys()返回键的列表

dict.values()返回值的列表

dict.items()返回键值对的元组形式列表

dict.clear()清除所有键值对

dict.popitem()每次弹出一个键值对,并删除词典中对应项。

>>> try:

... while True:

... print d.popitem()

... except KeyError: #当词典被全部删除空时会发生

... pass

popitem()是在Python2.1中开始提供的。

dict.copy()方法创建词典的副本。副本有深浅之分,详细查阅后面。

原创粉丝点击