分片用于截取某个范围内的元素,通过:来指定起始区间(左闭右开区间,包含左侧索引值对应的元素,但不包含右测索引值对应的元素)
#注意不包括右边索引值对应的元素,索引下标从0开始
>>> num = [1,2,3,4,5,6,7,8,9,10]
>>> num[3]
4
#输出第四个数字,因为索引是从0开始
>>> num[3:6]
[4, 5, 6]
#注意右边界,左闭右开区间,通过索引值的相减,可得输出三个数字,该数字从第4位开始
>>> num[3:9]
[4, 5, 6, 7, 8, 9]
>>num[-1] #取最后一个元素
[10]
>>> num[-3:-1]#注意是不包含最后一个元素的
[8, 9]
>>> num[-4:-1]
[7, 8, 9]
>>> num[-10:-1]#同样满足左闭右开区间
[1, 2, 3, 4, 5, 6, 7, 8, 9]
#取包含最后一位数值的切片
>>> num[-5:]
[6, 7, 8, 9, 10]
>>> num[3:-1]
[4, 5, 6, 7, 8, 9]
#取最右3个元素
>>> num[-3:]
[8, 9, 10]
#取最左3个元素
>>> num[:3]
[1, 2, 3]
#可以加入step length,从第1位开始,每隔3个数字取一个
>>> num[1:10:3]
[2, 5, 8]
>>> num[0:10:3]
[1, 4, 7, 10]
#起始位置默认为最左和最右,但不包括最右的元素
>>> num[::2]
[1, 3, 5, 7, 9]
>>> num[0:9:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> num[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#如果step length为0,会报错,也就是说**步长不可以为0**
>>> num[1:5:0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero
#如果步长为负数,表示从右向左提取元素
#注意不包括6对应的元素
num[10:6:-1]
[10, 9, 8]
#列表取反
>>> num[10::-1]#或者 num[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
#从最左边开始
>>> num[:-3:1]
[1, 2, 3, 4, 5, 6, 7]
>>> num[:3:1]
[1, 2, 3]
#从最右边开始
>>> num[:3:-1]
[10, 9, 8, 7, 6, 5]
分片包括起始索引对应的元素,但不包括终止索引对应的元素,索引为正值时可以发生越界但只会取到最后一个元素。如果索引值为负值,则表示从最右边元素开始,此时需避免索引越界。
#列表
>>> [1,2,3] + [3,2,1]
[1, 2, 3, 3, 2, 1]
#字符串
>>> 'Hi' + ',' + 'Baby'
'Hi,Baby'
#元组(tuple)
>>> ('This','is','a') + ('test','case')
('This', 'is', 'a', 'test', 'case')
#如果序列类型不一致,则会报错
>>> 'Hi' + [1,2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'list' objects