2022年 11月 9日

Python列表切片操作

列表的切片操作

完整的切片表达式使用2个冒号分隔的3个参数[start : stop : step]

第一个数字表示切片开始的位置(默认为0),第二个数字表示切片截至(但不包含)位置(默认为列表长度),第三个数字表示切片的步长(默认为1),当步长省略时可以省略最后一个冒号。

可以使用切片来截取列表中的任何部分,并得到一个新列表,也可以通过切片来修改和删除列表中的部分元素或者增加元素。(切片操作不会因为下标越界而抛出异常)

>>> a = [0,1,2,3,4,5,6,7]
  • 1

(1)切取单个元素

#当索引只有一个数时,表示切取单个元素
>>>a[0]
>>>0
>>>a[-1]
>>>7
  • 1
  • 2
  • 3
  • 4
  • 5

(2)切取完整列表

>>>a[:]			#表示从左往右切取
>>>[0,1,2,3,4,5,6,7]
>>>a[::]		#表示从左往右切取
>>>[0,1,2,3,4,5,6,7]
>>>a[::-1]		#步长为-1,表示从右往左
>>>[7,6,5,4,3,2,1,0]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(3)start和stop都为正数的情况

>>>a[1,5]		#表示切取从下标为1的元素至下标为5的元素(不包含5)
>>>[1,2,3,4]	
#默认step=1 从左往右取值
  • 1
  • 2
  • 3
>>>a[1:5:-1]
>>>[]  #说明为切取到数据
#step=-1 表示从右往左切取,而start=1和step=5说明从左往右切取,产生矛盾,所以为空
#同理
>>>a[5:1]
>>>[]	#输出为空
#step省略,默认为1,表示从左往右切取,而start=5和step=1说明从右往左切取,产生矛盾,所以为空
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
>>>a[:5]
>>>[0,1,2,3,4]
#step默认为1,start默认为端点(因为step为正数,此处端点为起点),即从下表为0的起点取到下标为5的元素
#同理
>>>a[:5:-1]
>>>[7,6]
# step=-1,表示从右往左切取,start默认为端点(因为step为负数,此处端点为终点),即从最后一个元素切取至下标为5的元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
>>>a[5::-1]
>>> [5, 4, 3, 2, 1, 0]
#step=-1,表示从右往左取值,即从下标为5的元素取到起点
  • 1
  • 2
  • 3

(4)start和stop都为负数的情况

>>>a[-1,-5]	
>>>[]		#说明为切取到数据
#默认step=1 表示从左往右取值,而start=-1,stop=-5表示从右往左取值,产生矛盾,所以为空
>>>a[-5:-1-1]	  #step=-1,表示从右往左,而start=-5,stop=-1表示从左往右取值,产生矛盾,所以为空
>>>[]	
  • 1
  • 2
  • 3
  • 4
  • 5
>>>a[-1:-5:-1]
>>>[7,6,5,4]  #step=-1表示从右往左,从下标为-1的元素切取到下标为-5的元素
#同理
>>>a[-5:-1]	  #step默认为1,表示从左往右,从下标为-5的元素切取到下标为-1的元素
>>>[3,4,5,6]	
  • 1
  • 2
  • 3
  • 4
  • 5

(3)start和stop为相反数的情况

>>>a[1:-5]		#表示切取从下标为1的元素至下标为-5的元素
>>>[1,2]	
#默认step=1 从左往右取值
  • 1
  • 2
  • 3
>>>a[-1:5]		#表示从左往右切取从下标为-1的元素至下标为5的元素
>>>[]			#产生矛盾
>>>a[1:-5-1]  #表示从右往左切取从下标为1的元素至下标为-5的元素
>>>[]			#矛盾
  • 1
  • 2
  • 3
  • 4
>>>a[-1:5:-1]		#表示从右往左切取从下标为-1的元素至下标为5的元素
>>>[7,6]	
#step=-1 从右往左取值
  • 1
  • 2
  • 3

(4)用法

1.取偶数位置

>>>a[::2]
>>>[0,2,4,6]
  • 1
  • 2

2.拷贝列表

>>>b = a[:]
>>>print(b)
>>>[0,1,2,3,4,5,6,7]
>>>print(id(a))
>>>1797956919944
>>>print(id(b))
>>>1797961682056
#该拷贝属于浅拷贝,只拷贝最外层元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.修改单个元素

>>>a[1]=10
[0,10,2,3,4,5,6,7]
  • 1
  • 2

4.替换元素

>>>a[1:3]=[0,0]
[0,0,0,0,4,5,6,7]
  • 1
  • 2

python自学笔记 仅供参考