python 切片

原文链接:
https://blog.csdn.net/xpresslink/article/details/77727507
https://blog.csdn.net/heifan2014/article/details/78719369

通常一个切片操作要提供三个参数 [start_index: stop_index: step]
start_index是切片的起始位置
stop_index是切片的结束位置(不包括)
step可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。

step 是正数

以list[start_index]元素位置开始, step做为步长到list[stop_index]元素位置(不包括)为止,从左向右截取
start_index和stop_index不论是正数还是负数索引还是混用都可以,但是要保证 list[stop_index]元素的【逻辑】位置,必须在list[start_index]元素的【逻辑】位置右边,否则取不出元素。

>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[1:5]
[1, 2, 3, 4]
>>> alist[1:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> alist[-8:6]
[2, 3, 4, 5]

step 是负数

以list[start_index]元素位置开始, step做为步长到list[stop_index]元素位置(不包括)为止,从右向左截取
start_index和stop_index不论是正数还是负数索引还是混用都可以,但是要保证 list[stop_index]元素的【逻辑】位置
必须在list[start_index]元素的【逻辑】位置左边,否则取不出元素。

比如下面的几个例子都是合法的:
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[-1: -5: -1]
[9, 8, 7, 6]
>>> alist[9: 5: -1]
[9, 8, 7, 6]
>>> alist[-1:1:-1]
[9, 8, 7, 6, 5, 4, 3, 2]
>>> alist[6:-8:-1]
[6, 5, 4, 3]

一些常用的切片操作

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

取前一部分

alist[:5]
[0, 1, 2, 3, 4]

取后一部分

alist[-5:]
[5, 6, 7, 8, 9]

取偶数位置元素

alist[::2]
[0, 2, 4, 6, 8]

取奇数位置元素

alist[1::2]
[1, 3, 5, 7, 9]

浅复制,等价于list.copy()更加面向对象的写法

blist = alist[:]
blist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

返回一个逆序列表,推荐reversed(list)的写法,更直观易懂。

alist[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

在某个位置插入多个元素

alist[3:3] = [‘a’,‘b’,‘c’]
alist
[0, 1, 2, ‘a’, ‘b’, ‘c’, 3, 4, 5, 6, 7, 8, 9]

在开始位置之前插入多个元素

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
alist[:0] = [‘a’,‘b’,‘c’]
alist
[‘a’, ‘b’, ‘c’, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

替换多个元素

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
alist[0:3] = [‘a’,‘b’,‘c’]
alist
[‘a’, ‘b’, ‘c’, 3, 4, 5, 6, 7, 8, 9]

删除切片

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del alist[3:6]
alist
[0, 1, 2, 6, 7, 8, 9]

使用索引获取列表的元素(随机读取)

列表元素支持用索引访问,正向索引从0开始

colors=[“red”,“blue”,“green”]
colors[0] == “red”
colors[1] == “blue”
同时,也可以使用负向索引(python中有序序列都支持负向索引)
colors[-1]==“green”
在这里插入图片描述

列表的切片操作

切片操作不是列表特有的,python中的有序序列都支持切片,如字符串,元组。

切片的返回结果类型和切片对象类型一致,返回的是切片对象的子序列,如:对一个列表切片返回一个列表,
字符串切片返回字符串。
切片生成的子序列元素是源版的拷贝。因此切片是一种浅拷贝。

li=[“A”,“B”,“C”,“D”]
格式: li[start : end : step]
start是切片起点索引,end是切片终点索引,但切片结果不包括终点索引的值。step是步长默认是1。
t=li[0:3] [“A”,“B”,“C”] #起点的0索引可以省略,t=li[:3]
t=li[2: ] [“C”,“D”] #省略end,则切到末尾
t=li[1:3] [“B”,“C”]
t=li[0:4:2] [“A”,“C”] #从li[0]到li[3],设定步长为2。

确定start和end

在step的符号一定的情况下,start和end可以混合使用正向和反向索引,无论怎样,你都要保证
start和end之间有和step方向一致元素 间隔,否则会切出空列表

t=li[0:2]
t=li[0:-2]
t=li[-4:-2]
t=li[-4:2]
上面的结果都是一样的;t为[“A”,“B”]
在这里插入图片描述

t=li[-1:-3:-1]
t=li[-1:1:-1]
t=li[3:1:-1]
t=li[3:-3:-1]
上面的结果都是一样的;t为[“D”,“C”]
在这里插入图片描述

t=li[-1:-3]
t=li[-1:1]
t=li[3:1]
t=li[3:-3]
都切出空列表
在这里插入图片描述

省略start 和 end表示以原列表全部为目标t=li[::-1] t—>[“C”,“B”,“A”] #反向切,切出全部
t=li[:] t—>[“A”,“B”,“C”,“D”] #正向切全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值