Python基础(二):列表和元组
日期:2015年10月10日 作者:雨水
概述
本文为<Python基础教程>的读书笔记(二)
列表索引
Python中列表的索引也是从0开始的。比如:
>>> hello="Hello"
>>> hello[0]
>>> hello[0]
'H'
Python还支持负数索引,这是Java等语言所没有的特点。当使用负数索引时,Python从右边,也就是从最后1个元素开始计数,最后一个元素的位置是-1。
>>> hello[-1]
'o'
'o'
>>>
对于字符串常量,不需要变量就可以引用,比如:
>>> 'Hello'[0]
'H'
>>> "Hello"[0]
'H'
'H'
>>> "Hello"[0]
'H'
>>>
如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作,比如:
>>> ret=raw_input('Year: ')[3]
Year: 2015
>>> ret
'5'
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'
'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]
[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]
[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]
[1, 2, 3, 4, 5, 6]
>>>
注意:列表和列表,字符串和字符串可以相加,而列表和字符串无法相加。
序列乘法
用数字x乘以一个序列,序列会生成新的序列,新的序列将被重复x次。如:
>>> 'hello' * 2
'hellohello'
>>> [12] * 3
[12, 12, 12]
'hellohello'
>>> [12] * 3
[12, 12, 12]
>>>
空列表
>>> []
[]
>>> None
>>>
>>> [None] * 5
[None, None, None, None, None]
[]
>>> 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
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
>>> x[1]=2
>>> x
[1, 2, 5]
删除元素:del语句
>>> x=[1, 2, 5]
>>> del x[1]
>>> x
[1, 5]
>>> del x[1]
>>> x
[1, 5]
>>>
分片赋值
分片赋值的时候,可以使用与原序列不等长的序列将分片替换。当原序列长度为零时,就变成插入了。当替换序列长度为零时,就变成了删除。如:
>>> name=list('hello')
>>> name[2:3]=list('aa')
>>> name
['h', 'e', 'a', 'a', 'l', 'o']
>>> 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[2:2]=list('345')
>>> name
['h', 'e', '3', '4', '5', 'l', 'l', 'o']
>>>
>>> name=list('hello')
>>> name[2:4]=[]
>>> name
['h', 'e', 'o']
>>> 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]
>>> 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, 3)
元组通常用圆括号括起来
>>> (1,2)
(1, 2)
>>> ()
()
包含值的元组必须要包含逗号,即时只有一个值,如:
>>> (1,)
(1,)
>>> (1)
1
1
后面这个就不是元组。
tuple函数
tuple函数以一个序列作为参数并把它转换为元组,如:
>>> tuple([1,2,3])
(1, 2, 3)
参考资料:
[1] <Python基础教程(第2版)>