第二章 列表和元组
01:概念
最基本的数据结构是序列(sequence) 索引从0开始 【序列可以嵌套】
6种内建序列:列表 元组
字符串、Unicode字符串、buffer对象、xrange对象
列表和原组区别:列表能修改、元组不能修改
列表: edward = ["edward",42]
元组:(1,2,3)
02:通用序列操作:
1.索引
和数组概念类似,但允许负数
0==>左1 -1==>右1(最后位置开始数 -1)
2.分片
即切割
Name[s:e] name=序列名字 s=开始的索引 e=实际结束的索引+1 [s;e)
假设:name[a:b]
[a:b] == [a,b) a<0时b!=0 a在序列中一定出现的比b早(从左至右)
第一个 或者最后一个可以用空代替 如numbers[-3:] numbers[:3]
numbers[:] == 整个序列
[a:b:c] c为步长,c!=0
c>0时 从左至右 numbers[0:10:2] ==>[1,3,5,7,9]
c<0时 从右至左 a>b numbers[10:0:-2] ==>[10,8,6,4,2]
3.加法
[1,2,3]+[4,5,6] ==> [1,2,3,4,5,6]
同类型才能加!!!
4.乘法
序列*数字==>序列*n ==> 序列重复n次
"python"*5 ==> "pythonpythonpythonpythonpython"
[42]*5 ==> [42,42,42,42,42]
[None]*10 长度为10的空列表
None是Python内建值,表示什么都没有
5.成员资格
检查元素是否包含在该列表内,返回True或者False。
>>>permissions=’rw’
>>>’w’ in permissions
==>True
6.长度、最小值和最大值
内建函数 len min max len() min() max()
7.list函数
拆分转换为列表
>>>list(‘hello’)
==>[‘H’, ’e’, ’l’, ’l’,’ o’]
03:列表操作
最后结果依旧是列表
1.元素赋值
和数组类似,利用索引指定元素,进行赋值
>>>x = [ 1,1,1]
>>>x[1]=2
>>>x
====> [1,2,1]
2.删除元素
使用del 语句 如:del names[2]
3.分片赋值
A:实现不等长序列替换
>>>name = list(“Perl”)
>>>name[1:] = lis(“ython”)
>>>name
======> [‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]
B:插入新元素
>>>numbers = [1,5]
>>>numbers[1:1]=[2,3,4,5]
>>>numbers
=====>[1,2,3,4,5]
C:删除元素,将要删除的元素,使用对应索引,赋值为空
>>>numbers = [1,2,3,4,5]
>>>numbers[1:4]=[]
>>>numbers
=====>[1,5]
4.列表方法
01.append方法
作用:在列表末尾追加新对象。
>>>lst = [1,2,3]
>>>lst.append(4)
>>>lst
=====>[1,2,3,4]
注意:append方法是直接修改原列表
02.count 方法
作用:统计某元素出现的次数,返回次数!
>>>[‘to’, ‘be , ‘or’, ‘not’, ‘to’, ‘be’].count(‘to’)
=====>2
>>>x = [ [1,2], 1, 1, [2, 1, [1, 2]]]
>>>x.count(1)
=====>2
>>>x.count([1, 2])
=====>1
03.extend 方法
作用:用新列表拓展原列表 在列表末尾一次性追加另一个序列的多个值
>>>a= [1,2,3]
>>>b=[4,5,6]
>>>a.extend(b)
>>>a
=====>[1,2,3,4,5,6]
对比
>>>a= [1,2,3]
>>>b=[4,5,6]
>>>a+b
=====>[1,2,3,4,5,6]
>>>a
=====>[1,2,3]
注意:extend方法是直接修改原列表 a
+ 连接 是创建a和b 连接后的副本 ==> a+b
04.index 方法
作用:查找某值的第一个匹配索引(第一次出现的位置),返回索引
与count方法使用类似
05.insert方法
作用:对象插入列表中 a.insert(s,value) s==插入起始位置 value == 插入的值
>>>numbers=[1,2,3,5,6,7]
>>>numbers.insert(3, ’four’)
>>>numbers
=====>[1,2,3, ’four’ ,5,6]
06.pop方法
作用:移除一个元素(默认最后一个),返回被移除元素的值
X.pop(index) index==>需要删除元素的索引 空为默认情况,移除最后一个
>>>x= [1,2,3]
>>>x.pop()
=====>3
>>>x
=====>[1,2]
>>>x.pop(0)
=====>1
>>>x
=====>[2]
注意:pop 方法实现 栈 的出栈功能,入栈可以使用append方法 都是在末尾添加删除元素(默认情况下)
07.remove方法
作用:删除指定元素第一个匹配项,无返回值!
>>>x=[‘to’, ‘be , ‘or’, ‘not’, ‘to’, ‘be’]
>>>x .remove(‘be’)
>>>x
=====>[‘to’, ‘or’, ‘not’, ‘to’, ‘be’]
删除不存在的值会报错
08.reverse方法
作用:将列表中元素反向存放 x.reverse()
>>>x=[1,2,3]
>>>x.reverse()
>>>x
=====>[3,2,1]
09.sort方法
作用:原位置排序,会改变原列表!需要保存原列表时,应该用原列表的副本进行sort排序!
>>>x=[4,6,2,1,7,9]
>>>y=x[:]
>>>y.sort()
>>>x
=====>[4,6,2,1,7,9]
>>>y
=====>[1,2,4,6,7,9]
y=x[:] 简便复制副本 Y.sort()方法无参默认升序排序。
Sorted方法 返回一个列表
>>>x=[4,6,2,1,7,9]
>>>y=sorted(x)
>>>x
=====>[4,6,2,1,7,9]
>>>y
=====>[1,2,4,6,7,9]
使用Sorted方法达到了一样的效果 sorted(x) 保留了x原列表,新建了一个列表 保存排序后的列表!
10.高级排序
Sort函数原型
L.sort(cmp=None, key=None, reverse=False)
A:cmp函数 【目前没搞明白】
B:key 称为键 即关键字 如len
C:reverse 反向操作,True为逆向排序,False为正向
尽量使用key而不是cmp来排序以提高运行速度
04元组
1.概念
不可修改的序列!使用圆括号括起来
A 自动创建元组 使用逗号分隔一些值
>>>1,2,3
=====>(1,2,3)
B 空元组 直接输入一对圆括号
>>>()
=====>()
C 包括一个值的元组 一个值后面加逗号!
>>>42,
=====>(42,)
>>>(42,)
=====>(42,)
2.tuple函数
作用:序列转换为元组 tuple(x) x为参数,需要转换的序列
>>>tuple([1,2,3]) #列表转换成元组
=====>(1,2.3)
>>>tuple(‘abc’)
=====>(‘a’, ‘b’, ‘c’)
>>>tuple( (1,2,3))
=====>(1,2.3)
3.基本元组操作
与序列大致相同,除了创建和访问
>>>x =1,2,3
>>>x[1]
=====>2
>>>x[0:2]
=====>(1,2)
元组分片还是元组
4.元组的其他应用
A:映射(集合)中当作键使用 【元组特有,而列表没有的功能】
B:元组作为很多内建函数和方法的返回值存在,也就是说,你必须对元组进行处理。一般不希望被修改。