python_基础_4__列表_元组_字典_集合
在python中,列表,元组,字典,集合比较强大。它对于数据组织提供方便。特别是这些序列处理方法,比C方便快捷。
序列
序列是最基本数据结构之一,序列的每个元素都可以是任何类型(也可以是序列)。
每个元素被分配一个序号,即元素位置(也称索引)。第一个序号规定为0,第二为1.……
python中的序列包括六种:
列表,元组,字符串,Unicode字符串,buffer对象和xrange对象, 常用的是前三种。
列表用中括号[],元组使用圆括号().
列表是可以修改的,而元组是不可以修改的。
>>> lsa = [1,2,3]
>>> lsa
... [1,2,3]
>>> lsa[0] = 2
>>> lsa
... [2,2,3]
>>> tup = (1,2,3)
>>> tup
... (1,2,3)
>>> tup[0] #注意引用元组中的元素时,下标也是要用中括号[],而不是圆括号()
... 1
>>> tup[0] = 2 #想给元组的第一个元素重赋值,修改它,会提示出错
Traceback(most rcent call last): #出错信息...
File"<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
序列的基本操作:
序列有六种,它们之间有些通用操作,是最基本、最常见的。它们是:
- 索引
- 切片
- 序列加
- 序列乘
- in
- len、 max、 min
1 索引: 序列[编号]
序列中每个元素都有编号(从0开始),元素可以通过编号来进行访问。
想读取倒数第几个元素时,最后一个元素的编号是-1, 倒数第二个是-2
>>> a = [1,2,3]
>>> a[0]
1
>>> a[-1]
3
2 切片: 序列[ 开始编号 : 结束编号的后一个 : 步长 ]
使用索引每次读取一个值,也可以用切片读取序列中的一段值。默认步长是1
>>> a = [1,2,3,4,5]
>>> a[1:3]
... [2,3] #索引号是3的元素(4)并不在内
>>> a[1:-1] #最后一个不包括在内
... [2,3,4]
>>> a[1:] #省略结束编号,表示起始编号到最后所有
... [2,3,4,5]
>>> a[ :-1] #省略起始编号,表示从编号[0]开始
... [1,2,3,4]
>>> a[:] #前后都没给定,表示整个序列
... [1,2,3,4,5]
>>> a[0:4:2] #从第一个到第四(编号3)个,步长为2
... [2, 4]
#使用切片得到结果还是一个序列,哪怕是只有一个元素:
>>> a = [1,2,3,4,5]
>>> a[2:3]
... [3] #3的外面有中括号,说明它是一个列表,而不只是一个数值
>>> type(a[2:3]) #用type()函数返回a[2:3]的类型
... < type 'list'> #返回的类型是'list',即列表
3 序列加: 序列 + 序列
可以用‘+’把两个相同类型的序列连接在一起。
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
... [1,2,3,4,5,6]
前后两个序列类型要相同,否则出错:
>>> a = [1,2,3] #列表
>>> b = (4,5,6) #元组
报错...
4 序列乘: 序列 * n
可以用‘*’例序列重复n次,得到一个新的序列,n表示重复的次数:
>>> a = [1,2,3]
>>> a *3
... [1,2,3,1,2,3,1,2,3]
5 in: 元素 in 序列
可以使用“in”检查某个元素是否在序列中, 返回布尔值True或False:
>>> a = [1, 2, 3]
>>> 1 in a
... True
>>> 5 in a
... False
6 len、max、 min : len(序列), max(序列), min(序列)
len, max, min是python内建的函数,分别返回序列的长度,最大的元素,最小的元素(值):
>>> a = [1,2,3,4,5]
>>> len(a)
... 5
>>> max(a)
... 5
>>> min(a)
... 1
>>> max(1, 2,55) #不一定要是序列名,可以用多个数字作为参数
... 2.55
>>> min(2.4, -1)
... -1
列表
列表的创建: [], 例: >>> a = [1,2,3]
单个元素的修改: >>> a[0] = 2
切片修改:
使用索引可以找到一个元素,并可以修改这个元素的值,用切片可以找到一段元素,并可以修改一段元素的值。
>>> list_a = [1,2,3,4]
>>> list_a[0:2] = [5,6]
>>> list_a
... [5,6,3,4]
python中可以使用不定长的序列来修改选中的切片。这意味着把一段长度为0的序列赋值给一段长度不为0的切片等于删除,把长度不为0的序列赋值给长度为0的切片等于添加。
>>> list_a = [1,2,3,4]
>>> list_a[1:3] = [] #相当于删除1,2号元素
>>> list_a
...[1,4]
>>> list_a[0:0] = [999, 888] #相当于添加两个元素
>>> list_a
...[999, 888, 1, 4]
>>> list_a[1:3] = list("hello") #段替换
>>> list_a
... [999, 'h', 'e', 'l', 'l', 'o', 4]
元素删除
除了用长度为0的序列来替换要删除的一段外,还可以用del语句,与修改相类似,也可以删除多个元素。例:
>>> list_a = [1,2,3,4]
>>> del list_a[0] #删除一个元素
>>> list_a
...[2,3,4]
>>> del list_a[0:2] #删除一段元素
>>> list_a
...[4]
4.3.3 列表法
对象.方法(参数)
1 append方法: 在一个列表后面追加一个元素:
>>> list_a = [1,2,3]
>>> list_a.append(4) #在列表后面追加一个元素4
>>> list_a
...[1,2,3,4]
2 count方法: 查看某个元素在列表中出现的次数:
>>> list_a = [1,2,3,4,1,2,1]
>>> list_a.count(1)
...3
3 extend方法: 用其他列表拓展原有的列表,其他列表的元素被添加到原有列表后面:
>>> list_a = [1,2,3]
>>> list_b = [4,5,6]
>>> list_a.extend(list_b)
>>> list_a
...[1,2,3,4,5,6]
4 index方法: 返回某个元素的索引,如果元素不存在,会引发异常:
>>> list_a = [1,2,3,88,4,5,6]
>>> list_a.index(88) #返回88的索引
...3
>>> list_a.index(99) #99不存在,返回错误
...显示出错信息...
5 insert方法: 在序列的某个位置插入一个元素:
>>> list_a = [1,2,3,4]
>>> list_a.insert(2, "Hello") #在2号位置插入'Hello'
>>> list_a
...[1,2,'Hello', 3,4] #插入不是替换,所以元素3还在
>>> list_a.insert(10, 'world') #10号位置不存在,'world'直接插到序列末
>>> list_a
...[1,2,'Hello',3,4,'world']
6 pop方法: 移除列表某个位置的元素并返回该元素,如果没指定要移除元素的索引,pop方法默认移除最后一个元素。
>>> list_a = [1,2,3,4]
>>> list_a.pop() #移除最后一个元素
...4
>>> list_a
...[1,2,3]
>>> list_a.pop(0) #移除0号元素
...1
>>> list_a
...[2,3]
7 remove方法: 移除序列中第一个与参数匹配的元素, 注意是第一个而不是所有:
>>> list_a = [1,2,88,3,4,88,5,6]
>>> list_a.remove(88) #移除第一个88
>>> list_a
...[1,2,3,4,88,5,6] #第二个88没有被删除
8 reverse方法: 将列表改为倒序:
>>> list_a = [1,2,3,4]
>>> list_a.reverse()
>>> list_a
...[4,3,2,1]
9 sort方法: 对列表进行排序,默认为升序:
>>> list_a = [4,6,2,7,1,8]
>>> list_a.sort()
>>> list_a
...[1,2,4,6,7,8]
sort可以传入其它参数,它们是key, cmp, reverse
key和cmp参数都是接受一个函数,注意是函数!这两个函数在比较前调用,作用于元素上返回一个结果,元素进行比较时根据这个结果进行。
其中key是带一个参数的函数。用来为每个元素提取比较值。例:
>>> names = ['Judy', 'Peler', 'Perkins']
>>> names.sort(key=len) #按名字长度排序,注意len函数不用输入圆括号
>>> names
...['Judy', 'Peler', 'Perkins']
cmp是带两个参数的比较函数,形式为cmp(e1, e2), 返回.值为负时代表e1<e2, 为0时代表e1==e2, 为正是代表e1>e2。但这个结果如果用到排序上,我现在还不清楚。以后用到再说。
reverse接收一个bool型变量, 为True时,将序列反序。
key, cmp默认值为None, reverse的默认值为False.
如上例中,改成:
>>> names.sort(key=len, reverse=True) #根据元素长度排序,倒序
>>> names
...['Perkins', 'Peler', 'Judy']