第二章 列表和元组

来源:互联网 发布:访客网络的区别 编辑:程序博客网 时间:2024/06/07 19:27

第二章
1.列表
python中最基本的数据结构是序列,序列中的每个元素被分配一个序号——即元素的位置
python中包含6种內建的序列:列表,元组,字符串,Unicode字符串,buffer对象,xrange对象

列表可以修改,元组不能

一般情况下,列表都可以代替元组(当使用元组做字典的键时,因为键不可以修改,所以不能使用元组)

2.1

列表元素的类型可以不相同:例如可以用列表表示数据库中一个人的信息——第一个元素是姓名,第二个元素是年龄

>>>Edward=['Edward Gumby',42]

同时,序列也可以包含其他的序列,

>>>Edward=['Edward Gumby',42]>>> john=['john Simth',50]>>>database=[john,Edward]

注意:python中还有一种名为容器的数据结构。容器基本上包含其他对象的任意对象。序列(例如列表和元组)和映射(例如字典)是两类主要的容器。序列中的每个元素都有自己的编号,而映射中的每个元素则有一个自己的名字 (也称为键)。此外还有集合也是容器类型。

2.2通用序列操作

所有的序列类型都可以进行某些特定的操作:索引、分片、加、乘以及检查某个元素是否属于序列的成员。python中有计算序列长度、找出最大和最小元素的內建函数。

迭代:依次对序列的每个元素重复执行某些操作。

2.2.1 索引

序列中的所有元素都是有编号的—从0开始递增。这些元素可以通过编号分别访问

>>>greeting='Hello'>>>greeting[0]

索引0指向第一个元素,这就是索引。通过索引获取元素。
使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。最后一个元素的位置编号是 -1.

字符串能够直接使用索引,而不需要一个变量引用它们。两种做法的效果是一样的:

>>>'hello'[1]>'e'如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如:>>>fourth=raw_input('Year:')[3]Year=2005>>>fourth'5'

2.2.2 分片

>>>tag='<a href="http://www.python.org">Python web site</a>'>tag[9:30]

第一个索引是需要提取部分的第一个元素的编号,最后的索引则是分片之后剩下部分的第一个元素的编号。

>>>number=[1,2,3,4,5,6,7,8,9,10]

希望访问到最后一个元素

>>>number[-3:-1][8,9]>>>number[-3:0][]

这不是我们想要的结果。分片中最左边的索引比右边的晚出现在序列中,结果就是一个空序列。

>>>number[-3:][8,9,10]>>>number[:3][1,2,3]>>>number[:]全部输出

2更大的步长

>>>number [0:10:1]

>>>number[10:0:-2] 左边比右边后的大,即左边是序列的尾部,右边是序列的头部
>>>number[0:10:-2]

输出空集
对于一个正步长,python会从序列的头部开始向右提取元素,直到最后一个元素;对于负步长,从序列的尾部开始向左提取元素,直到第一个 元素。

2.2.3 序列相加

通过加号进行序列的连接操作

>>>[1,2]+[3,4][1,2,3,4]>>>'Hello.'+'word''Hello.word'
>>>'Hello'+[1,2]  

错误,列表和字符串无法连接在一起,虽然都是序列。两种相同类型的序列才能进行连接操作。

2.2.4 乘法

用数字x乘以一个序列会生成新的序列,在新的序列中原来的序列被重复x次。

Python中內建None这个值,它的确切含义是这里什么都没有。

如果想初始化一个长度为10的列表

>>>sequence=[none]*10

2.2.5 成员资格

用in检查一个值是否在序列中,条件为真返回True条件为假返回False

>>>pe='rw'>>>'w' in peTRUE

2.2.6 长度、最小值和最大值(len、min、max)
例如:

>>>lennumber)>>>maxnumber)>>>min(nmuber)>>>min(1,2,3,)>>>max(2,3,4)

2.3

2.3.1 list函数

>>>list('Hello')['H','e','l','l','o']

将字符串转化为列表

列表可以使用所有序列的标准操作 ,例如索引、分片、连接和乘法。

1、为确定位置的元素赋值

2、删除

del xxx[]

3、分片赋值(可以使用与原序列不等长的序列进行替换)

>>>name=list('perl')>>>name[2:]=list('ar')

**程序可以一次为多个元素赋值。

>>>name[1:]=list('ython')name=['P','y','t','h','o','n']

分片赋值语句可以在不需要替换原有元素的时候插入新的元素

>>>number=[1,5]>>>number[1:]=[2,3,4]>>>numer[1,2,3,4,5]

这个程序只是替换了一个空的分片,因此实际的操作是插入了一个序列。以此类推,通过分片赋值来删除元素也是可行的。

>>>number=[1,2,3,4,5]>>>number[1:4]=[]>>>number[1,5]

2.3.3 列表方法

方法是一个与某些对象有密切联系的函数,对象可能是列表、数字,也可能是字符串或者其他类型的对象。调用方法:
对象.方法(参数)

  1. append 用于在列表条件末尾追加新的对象(直接修改原来的列表):
>>>lst=[1,2,3]>>>lst.append(4)>>>lst[1,2,3,4,]

2、count 用于统计某个元素在列表中出现的次数:

>>>['to','to'].count('to')2

只计数元素是否符合

>>>x=[[1,2],1,1,[2,1,[1,2]]]>>>x.count(1)2>>>x.count([1,2])1

3、extend 在列表的结尾一次性追加另一个序列中的多值。也可以用新列表扩展原有的列表:

>>>a=[1,2,3]>>>b=[5]>>>a.extend(b)>>>a[1,2,3,5]

4、index 用于从列表中找出某个值第一个匹配项的索引位置:

>>>knights=['we','are','the','knights','who']>>>knights.index('who')4

当无此元素时,报错

5、insert 用于将对象插入到列表中

xxx.insert(索引,插入元素)

6、pop 移除列表中的一个元素(默认最后一个),并且返回该元素的值

xxx.pop() 移除最后一个,并返回最后一个元素

xxx.pop(索引) 移除指定位置元素并返回

注意:pop方法是唯一一个既能修改列表又返回元素值的列表方法

7、remove 用于移除列表中某个值的第一个匹配项:

>>>x=['to','be','or','not','to','be']>>>x.remove('be')>>>x['to','or','not','to','be']

当不存在匹配项是报错

8,.reverse 将列表中的元素反向存放

9、sort 将列表进行排序 (将在原列表上进行修改,改变原列表)

例如:

>>>x=[1,3,2]>>>y=x[:]>>>y.sort()>>>y[1,2,3]>>>x[1,3,2]

当如下时

>>>y=x>>>y.sort()>>>x[1,2,3]>>>y[1,2,3]

当使用sorted函数是返回一个排好序的副本,原列表不变。

>>>sorted('Python')['P','h','n','o','t','y']

按ascii码顺序排序

2.4 元组

元组不能修改,创建元组的语法非常简单:如果用逗号分隔了一些值,那么你就自动创建了元组。

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

元组通过圆括号括起来

>>>42,(42,)  

长度为一的元组。

2.4.1 tuple函数

tuple将一个序列转换为元组。如果这个是元组那么原样返回。

2.4.2 基本元组操作

>>>x=1,2,3>>>x[1]1

**元组的作用:
1、当做键使用
2、作为函数的返回值存在**