【字符串-列表】
Python字符串是一个由字符组成的序列,索引0指向第一个元素;
使用负数索引时,python会从右边(最后1个元素)开始计数,最后一个元素的位置索引是-1,第二个是-2,以此类推;
【列表-分片操作】
可以使用分片操作来访问一定范围内的元素:第1个索引是需要提取部分的第一个元素的编号,第2个索引则是分片之后剩下部分的第1个元素的编号;参考如下代码:
>>>numbers = [1,2,3,4,5,6,7,8,9,10]
>>>numbers[3:6]
[4,5,6]
>>>numbers[0:1]
[1]
解析:分片操作的第1个索引是3,那也就是原列表的第4个元素‘4’;分片操作的第2个索引是6,也就是分片之后剩下部分的第1个元素‘7’(因‘7’的索引是6);所以numbers[3:6]分片操作后的结果是[4,5,6]
简而言之,分片操作的实现需要提供两个索引的作为边界,第1个索引的元素包含在分片内,第2个索引不包含在分片内
注意:如果分片操作第1个索引指向的元素比第2个索引指向的元素晚出现(需要区分是从前往后分片还是从后往前进行分片),结果会是一个空的序列。如numbers[-3:0]会得到一个空序列:[]
技巧:如果分片操作需要包含序列结尾的所有元素,只需要置第2个索引值为空即可,如numbers[-3:] -> [8,9,10]; 这样的操作同样适用序列开始的元素numbers[0:3] -> [1,2,3]
【列表-分片操作-设置步长】
分片操作其实会有3个索引值,其中第3个索引值就是步长,默认值是1;例如:numbers[0:10:2] -> [1,3,5,7,9]
步长可以是负数,即从右往左提取元素:numbers[8:3:-1] -> [9,8,7,6,5]; numbers[9:0:-2] -> [10,8,6,4,2]
注意:如从右往左提取元素,若第1个索引值超出索引范围,则分片操作提取的一个元素是原序列的最后一个元素:numbers[9:0:-2] = numbers[10:0:-2] = numbers[11:0:-2] -> [10,8,6,4,2]
如从左往右提取元素,若第2个索引值超出索引范围,分片操作则提取原序列符合步长要求的最后一个元素:numbers[0:9:2] = numbers[0:10:2] = numbers[0:11:2] -> [1,3,5,7,9]
【列表-分片操作-赋值】
1、使用分片赋值,可以使用与原序列不等长的序列分片替换:
name = list('Perl') -> ['P', 'e', 'r', 'l']
name[1:] = list('ython') -> ['P', 'y', t'', 'h', 'o', 'n']
2、可以在不需要替换任何原有元素的情况下插入新的元素:
>>>numbers = [1, 5]
>>>numbers[1:1] = [2,3,4]
>>>numbers
[1,2,3,4,5]
3、可以通过分片操作进行元素的删除:
>>>numbers=[1,2,3,4,5]
>>>numbers[1:4] = [] # del numbers[1:4]
>>>numbers
[1,5]
【列表-相加操作】
两种相同类型的序列才可以进行相加操作:[1,2,3] + [4,5,6] -> [1,2,3,4,5,6]; [1,2,3] + [‘Hello’] -> [1,2,3,‘Hello’]; [1,2,3] + 'Hello' -> ERROR: 列表和字符串是无法连接在一起,尽管他们都是序列
还可以使用内建函数extend进行连接操作:
>>>a = [1,2,3]
>>>b = [4,5,6]
>>>a.expend(b)
>>>a
[1,2,3,4,5,6]
两者最主要区别在于:extend方法修改了被扩展的序列,而原始的连接操作(+)会创建一个包含了a和b的副本的新序列,连接后再返回一个全新的序列。所以若有如下连接操作则会比extend方法效率低:a = a + b