Python基础(二):列表和元组


日期:2015年10月10日  作者:雨水


概述


本文为<Python基础教程>的读书笔记(二)




列表索引


Python中列表的索引也是从0开始的。比如:


>>> hello="Hello"
>>> hello[0]


'H'



Python还支持负数索引,这是Java等语言所没有的特点。当使用负数索引时,Python从右边,也就是从最后1个元素开始计数,最后一个元素的位置是-1。


>>> hello[-1]
'o'


>>>


对于字符串常量,不需要变量就可以引用,比如:


>>> 'Hello'[0]
'H'
>>> "Hello"[0]
'H'


>>>


如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作,比如:


>>> ret=raw_input('Year: ')[3]
Year: 2015
>>> ret
'5'


>>>


这里[3]直接跟在raw_input函数后面,把输入的结果的第四个字符赋值给ret。注意:这里如果输入少于四个字符,会报"IndexError: string index out of range"错误。



列表分片


分片可以访问一定范围内的元素,分片通过冒号隔开的两个索引来实现。比如:


>>> 'Hello'[1:4]


'ell'


注意:第一个索引的元素包含在分片内,而第二个则不含在分片内。


当分片包含第一个或者最后一个元素时,则第一个和最后一个元素的索引可以省略。如:


>>> 'Hello'[1:]
'ello'
>>> 'Hello'[:2]
'He'
>>> 'Hello'[:]
'Hello'


>>>


分片步长 


默认的分片步长是1,比如:


>>> num=[1,2,3,4,5,6,7,8]


>>> num[2:6]
[3, 4, 5, 6]
>>> num[2:6:1]
[3, 4, 5, 6]


>>>


也就是说,num[2:6]与num[2:6:1]等价,后者只是显示地指明了默认步长。当默认步长比1大的时候就会跳过一些元素,如:


>>> num[2:6:2]


[3, 5]


>>> num[::2]
[1, 3, 5, 7]


>>>


步长不能为零,但是可以为负数,此时分片从右到左开始提取数字。如:


>>> num[::-1]


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


需要注意的是,当步数为负时,开始点的索引要大于结束点的索引。



序列相加


通过加运算符+可以进行序列的连接操作,如:


>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]


>>> 



注意:列表和列表,字符串和字符串可以相加,而列表和字符串无法相加。



序列乘法


用数字x乘以一个序列,序列会生成新的序列,新的序列将被重复x次。如:


>>> 'hello' * 2
'hellohello'
>>> [12] * 3
[12, 12, 12]


>>>



空列表


>>> []
[]
>>> None
>>>
>>> [None] * 5
[None, None, None, None, None]


>>>


None是Python的一个内建值,代表什么都没有。



成员资格


为了检查一个元素是否在序列中,可以用in运算符,如:


>>> 'w' in 'Hello'


False


>>> 5 in [1,2,3]
False
>>> 1 in [1,2,3]
True


>>>



序列长度,最大值和最小值


内建函数len, max和min分别返回序列的元素数量,最大值和最小值。如:


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


3


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


1


>>> max([1,3,5])


5



list函数


>>> list('hello')


['h', 'e', 'l', 'l', 'o']



列表基本操作


改变列表:元素赋值


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


[1, 2, 5]



删除元素:del语句


>>> x=[1, 2, 5]
>>> del x[1]
>>> x
[1, 5]


>>>



分片赋值


分片赋值的时候,可以使用与原序列不等长的序列将分片替换。当原序列长度为零时,就变成插入了。当替换序列长度为零时,就变成了删除。如:


>>> name=list('hello')
>>> name[2:3]=list('aa')
>>> name
['h', 'e', 'a', 'a', 'l', 'o']


>>>



>>> name=list('hello')
>>> name[2:2]=list('345')
>>> name
['h', 'e', '3', '4', '5', 'l', 'l', 'o']


>>>



>>> name=list('hello')
>>> name[2:4]=[]
>>> name
['h', 'e', 'o']


>>>



列表方法


append方法用于在列表末尾追加新的对象


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


>>> num .append(4)


>>> num


[1, 2, 3, 4]


>>>


count方法用于统计某个元素在列表中出现的次数,如:


>>> num =[1,2,4,1,5,1]


>>> num .count(1)


3


>>>


 


extend方法可以在列表末尾一次性追爱记另外一个列表的多个值,如:


>>> num=[1,2,3]
>>> num.extend([4,5,6])
>>> num
[1, 2, 3, 4, 5, 6]


>>>


extend和列表连接的区别在于extend修改了原序列,而连接返回新的序列 


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


insert方法用于将对象插入到列表中


pop方法会移除列表中的一个元素(默认最后一个),并返回该元素的值


remove方法用于移除列表中某个值的第一个匹配项


reverse反复用于将列表中的元素反向


sort方法用于在原位置对列表进行排序



元组:不可变序列


元组就是不可变的序列


元组创建


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



元组通常用圆括号括起来


>>> (1,2)


(1, 2)


>>> ()


()



包含值的元组必须要包含逗号,即时只有一个值,如:


>>> (1,)


(1,)


>>> (1)
1


后面这个就不是元组。



tuple函数


tuple函数以一个序列作为参数并把它转换为元组,如:


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


(1, 2, 3)



参考资料:


[1] <Python基础教程(第2版)>