Python 切片的轻谈

(注意:本文基于Python3)

前言

中文名称:切片

中文别称:分片

英文名称:slice

概念:切片是Python中的一个特性

作用:将一个序列中一部分元素分离出来组成一个新的序列

介绍切片之前,需要掌握几个重要前置知识点,一个是序列、另一个是索引!

 

序列基础(前置知识,必须知道)

序列:也称为线性表,它是使用率最高的数据结构

特点:

1、第一个元素没有直接前驱元素,只有一个直接后继元素

2、中间的每个元素有一个直接前驱元素和一个直接后继元素

3、最后一个元素没有直接后继元素,只有一个直接前驱元素

存储结构:

1、可以使用连续存储结构实现序列,即数组,连续存储结构也称为顺序存储结构

2、可以使用非连续存储结构实现序列,即链表,非连续存储结构也被称为链式存储结构

 

Python中的序列类型

在Python中的所有序列类型全部支持切片功能,只要是个序列就支持切片

Python中的序列类型包括下面这些:

1、list

2、tuple

3、range

4、str

5、bytes

6、bytearray

7、memoryview

共计7个序列类型,最常用的为前4个类型:list、tuple、range、str

以下为7个序列类型的代码,以及切片操作的展示

>>> first_list = [1,2,3]
>>> type(first_list)
<class 'list'>

>>> second_tuple = (4,5,6)
>>> type(second_tuple)
<class 'tuple'>

>>> third_range = range(10)
>>> type(third_range)
<class 'range'>

>>> fourth_str = "wang yuan wai"
>>> type(fourth_str)
<class 'str'>

>>> fifth_bytes = b"i am fk"
>>> type(fifth_bytes)
<class 'bytes'>

>>> sixth_bytearray = bytearray(b'abcefg')
>>> type(sixth_bytearray)
<class 'bytearray'>

>>> seventh_memoryview=memoryview(b'abcefg')
>>> type(seventh_memoryview)
<class 'memoryview'>

 

Python索引基础(前置知识,必须知道)

Python中的所有序列支持索引功能

索引的别称:偏移量、下标

索引初始值:索引的初始值从0开始,第1个元素的索引值为0

负索引值:Python支持负索引,最后一个元素的负索引值为-1 (序列长度-1的索引值刚好指向最后一个元素,所以用-1表示最后一个元素)

 

举例

图示:定义一个字符串"WANGBA",共计6个元素

每个元素为一个字符串(Python没有字符类型,所以每个元素为单个字符的字符串)

假设变量名temp指向字符串对象"WANGBA",下文中将使用temp表示此字符串

temp="wangba"

备注:字符串类型是序列类型之一

 

正索引

方向:从左向右

第1个元素是字符串"W",它的索引值为0,第2个元素是字符串"A",它的索引值为1,而最后一个元素的索引值是序列长度-1,因为“WANGBA”的长度是6,所以最后一个元素"A"的索引值是5

方括号提取第一个字符:temp[0]

方括号提取最后一个字符:temp[5]

方括号接受索引值,即可提取出单个字符的字符串

 

负索引

方向:从右向左

最后一个元素为"A",它的负索引值为-1,倒数第二个元素为"B",它的负索引值为-2

那么负索引值是怎么推算出来的?为什么最后一个元素是-1呢?

以最后一个元素举例,序列长度-1就是最后一个元素的正索引值,如果省略掉序列长度,剩下的-1,就表示从右向左的负索引值

 

小结

无论是正索引操作、还是负索引操作,他们都只能从当前序列对象中提取出1个元素,有什么办法可以提取出多个元素组成一个新的序列呢?往下继续看切片……

 

介绍切片

使用索引值可以提取序列中的单个元素,而切片可提取单个元素或者提取多个元素作为一个新的序列对象,所有的序列类型都支持切片操作,接下来以字符串类型作为举例

 

切片语法

[start:end:step]

1、写在方括号中,由3个部分组成,每个部分使用冒号":"分隔开

2、3个部分,每个部分都可省略不写,此时会采用默认值

3、每部分的术语

start称为左边界、别称上边界,表示一个开始索引值

end称为右边界、别称下边界,表示为一个结束索引值

step称为步长、别称步进,表示每2个元素之间的索引值距离

4、省略时的默认值

start部分省略时,使用默认值为0

end部分省略时,使用默认值为序列长度

step部分省略时,使用默认值为1

5、取值约束

start值为整数即可,值可大于序列长度

end值为整数即可,值也可大于序列长度

step值必须大于等于1(若setp为0,Python解释会显式的抛出ValueError: slice step cannot be zero)

 

写法剧透

1、全部省略

[:]

2、省略end、省略step

[0:]

3、省略step

[0:5]

4、省略start、省略step

[:5]

5、省略start、省略end

 [::2]

6、省略start

[:5:1]

7、省略end

[1::3]

8、无省略

[0:5:2]

 

提取元素的特点

1、包含start下标对应的元素

2、不包含end下标对应的元素

3、提取出的是一个新的序列对象(创建一个新的对象)

 

详细举例

提取最后3个字符为新的字符串:
>>> temp = 'helloWangYuanWai'
>>> temp[-3:]
'Wai'    #完整的切片操作为 [-3:temp长度:1]

从开头到结尾,step为5:
>>> temp[::5]
'hWui'     #完整的切片操作为[0:temp长度:5]


字符串倒转(reverse),通过设置步长为-1:
>>> temp[::-1]
'iaWnauYgnaWolleh'  #完整的切片操作为 [0:temp长度:-1]

 

参考文章:https://docs.python.org/zh-cn/3/library/stdtypes.html#sequence-types-list-tuple-range

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值