目录
切片
作用:处理列表的部分元素
用切片复制列表
Python可切片对象的索引方式
切片的参数
step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。
[a::-1]的使用
[:b:-1]的使用
[::-1] 的使用
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[1:5])
输出:
[2, 3, 4, 5]
特点:左闭右开,[1:5]代表索引1、2、3、4的元素。
如果没有指定第一个参数,自动从头开始。
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[:5])
输出:
[1, 2, 3, 4, 5]
同理如果没有指定第二个参数,自动到末尾结束。
那么如何用切片复制一个列表呢?
代码:
list=[1,2,3,4,5,6,7,8,9] list_1=list[2:5] print(list) print(list_1)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9] [3, 4, 5]
当我们复制列表不用切片,而直接赋值时:
list=['cat','dog','pig'] list_1=list list.append('1') list_1.append('2') print(list) print(list_1)
输出:
['cat', 'dog', 'pig', '1', '2'] ['cat', 'dog', 'pig', '1', '2']
原本我们想得到的结果是在list列表中加上1,在list_1列表中加上2,然而得到的结果却是相同的。
这是因为这样实际上是让python将新变量(也就是list_1)关联原来的列表。当你用list_1列表或原来的list列表时实际上指向的是同一个列表。
包括:正索引和负索引两部分,如下图所示,以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
下面以实例说明负索引的使用:
list=[1,2,3,4,5,6,7,8,9] print(list[:-4])
输出:
[1, 2, 3, 4, 5]
[:-4]代表着索引为0、1、2、3、4的元素,也就是从第一个元素到倒数第5个。
切片操作基本表达式:object[start_index:end_index:step]
step为正数时
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[:6:2])
输出:
[1, 3, 5]
step=2代表从头开始每隔2个元素取一次值。
step为负数时
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[1:6:-1])
输出:
[]
输出为空列表,说明没取到数据,这是因为step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾,所以没有取到值。
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[4::-1])
输出:
[5, 4, 3, 2, 1]
当step为负数时,end_index默认为第一个数,所以从右往左取值,从start_index=4开始,一直取到“起点”1。
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[:4:-1])
输出:
[9, 8, 7, 6]
当step为负数时,start_index默认为最后一个数,所以从右往左取值,从“终点”值9开始,一直取到end_index=4(不包括该点)。
代码:
list=[1,2,3,4,5,6,7,8,9] print(list[::-1])
输出:
[9, 8, 7, 6, 5, 4, 3, 2, 1]
当start_index和end_index都不传入值时,而step为负,那么start_index默认为最后一个数,end_index默认为第一个数,所以从最后一个数从右往左取值一直到第一个数。
下面我们以一道题来说明:
编写函数, 接收一个列表(包含10个整形数)和一个整形数k, 返回一个新列表.
函数需求:
- 将列表下标k之前对应(不包含k)的元素逆序;
- 将下标k及之后的元素逆序;
代码:
def fun (list,k): if k<0 or k>len(list): return 'Error' else: list1=list[k:] list2=list1[::-1] list3=list[:k] list4=list3[::-1] return list4+list2 list=[1,2,3,4,5,6,7,8,9,10] print(list) print(fun(list,3))
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [3, 2, 1, 10, 9, 8, 7, 6, 5, 4]