Python中的切片(Slice)操作详解

这篇具有很好参考价值的文章主要介绍了Python中的切片(Slice)操作详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大家好,这里是果力成,话不多说,学之!
在python学习开发的过程中,我们难免会遇到从某个对象中抽取部分值的情况,对这种经常取指定索引的范围的操作,如果你使用循环的话是可以解决的,但是相对更好的方法而言,此操作是相当繁琐和费事的。
python中的 切片操作
正是专门用于完成这一操作的便捷有力方法.


切片的索引方式

Python可切片对象的索引方式包括:正索引和负索引。
如下图所示,以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
    ------>从左向右         从右向左<------

正索引 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,9
负索引 -10, -9,-8,-7,-6,-5,-4,-3,-2,-1
(起点)0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,9(终点)

Python列表切片

Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。
切片操作基本表达式:
object[start_index : end_index : step]

切片表达式包含两个":" ,用于分隔三个参数(start_index、end_index、step),当只有一个":"时,默认第三个参数step=1。

start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象’端点’开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据’端点’,至于是到’起点’还是到’终点’,同样由step参数的正负决定,step为正时直到’终点’,为负时直到’起点’。

step:(步长) , 正负数均可,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,step为正表示“从左往右”取值,step为负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。
tips:切取方向非常重要~


列表(list)切片操作详例

注意看代码语句后的注释理解
以下示例均以list列表 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1.切取列表单个值
print(a[1])
print(a[-3])

output: 1
     7 


2.切取列表完整对象
print(a[:])         # 从左往右
print(a[: :])       # 从左往右
print(a[: : -1])    # 从右往左

output:
Python中的切片(Slice)操作详解


3.start_index和end_index都为正(+)索引
print(a[1:6])	
# step=1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。

output : [1, 2, 3, 4, 5]

print(a[1:5:-1]) 
# step=-1,决定了从右往左取值,而start_index=1到end_index=5决定了从左往右取值,互相矛盾。

没有数据,输出的空列表
output : [ ]

print(a[5:1]) 
# step=1,决定了从左往右取值,而start_index=5到end_index=1决定了从右往左取值,互相矛盾。

没有数据,输出的空列表
output : [ ]

print(a[:5] )   
# step=1,从左往右取值,从“起点”开始一直取到end_index=5。

output : [0, 1, 2, 3, 4]

print(a[:5:-1]) 
# step=-1,从右往左取值,从“终点”开始一直取到end_index=5。

output : [9, 8, 7, 6]

print(a[5:]) 
# step=1,从左往右取值,从start_index=5开始,一直取到“终点”。
print(a[5::-1] )
# step=-1,从右往左取值,从start_index=5开始,一直取到“起点”。

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


4.start_index和end_index全为负(-)索引
print(a[-1:-5]) 
# step=1,从左往右取值,而start_index=-1到end_index=-5决定了从右往左取值,两者矛盾。
print(a[-1:-5:-1]) 
# step=-1,从右往左取值,start_index=-1到end_index=-5同样是从右往左取值。

output : [ ]
    [9, 8, 7, 6]

print(a[-6:-1]) 
# step=1,从左往右取值,而start_index=-6到end_index=-1同样是从左往右取值。
print(a[:-6]) 
# step=1,从左往右取值,从“起点”开始一直取到end_index=-6。
print(a[:-6:-1]) 
# step=-1,从右往左取值,从“终点”开始一直取到end_index=-6。

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

print(a[-6:]) 
# step=1,从左往右取值,从start_index=-6开始,一直取到“终点”。
print(a[6::-1]) 
# step=-1,从右往左取值,从start_index=6开始,一直取到“起点”。

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


5.start_index和end_index正(+)负(-)混合索引
print(a[1:-6]) 
# start_index=1在end_index=-6的左边,因此从左往右取值,而step=1同样决定了从左往右取值。
print(a[1:-6:-1]) 
# start_index=1在end_index=-6的左边,因此从左往右取值,但step=-则决定了从右往左取值,两者矛盾
print(a[-1:6]) 
# start_index=-1在end_index=6的右边,因此从右往左取值,但step=1则决定了从左往右取值,两者矛盾。
print(a[-1:6:-1]) 
# start_index=-1在end_index=6的右边,因此从右往左取值,而step=-1同样决定了从右往左取值。

output : [1, 2, 3]
        []
        []
       [9, 8, 7]


6.连续切片操作

再啰嗦一下:切取方向非常重要~

print(a[:8][2:5][-1:])

output : [4]

分步解:
a[:8]=[0, 1, 2, 3, 4, 5, 6, 7]
a[:8][2:5]= [2, 3, 4]
a[:8][2:5][-1:] = 4
解出a[:8],然后在a[:8]的基础上进行[2:5]切片,再对a[:8][2:5]进行[-1]切片.理论上可无限次连续切片操作,只要上一次返回的依然是非空可切片对象。


7.三个参数(start_index、end_index、step)表达式计算
print(a[2+1:3*2:7%3]) 
# a[2+1:3*2:7%3] = a[3:6:1]

output : [3, 4, 5]


Python元组切片

元组(tuple)也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

print((0, 1, 2, 3, 4, 5)[:3])

output : (0, 1, 2)


Python字符串切片

字符串(string) ‘aaa’ 或Unicode字符串 u’aaa’ 也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

print('ABCDEFG'[:3])
print('ABCDEFG'[::2])	#步长step为2

output : ABC
       ACEG

#字符串分割
print('Hello'[1:3])

直接看输出output : el


有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。例如:

for i in range(1,100)[2::3][-10:]:
    print(i, end=' ')
    #利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。

output : 72 75 78 81 84 87 90 93 96 99

for i in range(1,100)[2::3][:10]:
    print(i, end=' ')
    #同样是取3的倍数,不过是取前十个。

output : 3 6 9 12 15 18 21 24 27 30


Python切片操作

以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
插入
a[3:3] = ['A','B','C']
print(a)

output : [0, 1, 2, ‘A’, ‘B’, ‘C’, 3, 4, 5, 6, 7, 8, 9]


修改
a[3] = ['A','B']
print(a)

output : [0, 1, 2, [‘A’, ‘B’], 4, 5, 6, 7, 8, 9]


替换
a[3:6] = ['A','B']
print(a)

output : [0, 1, 2, ‘A’, ‘B’, 6, 7, 8, 9]


复制
print(a[:])
#将上面替换后的输出复制

output : [0, 1, 2, ‘A’, ‘B’, 6, 7, 8, 9]
注意:
[:]和.copy()都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用,而不是独立分配内存。浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。


取奇偶
# 1.取偶数位置
print(a[::2])
# 2.取奇数位置
print(a[1::2])

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


小结

切片操作是Python的基础操作之一,应当熟练掌握,会帮我们提高更多效率.切取方向非常重要~
了解透彻step,就很容易理解.这篇blog也是博主在前辈的基础上加上自己的理解学习总结的,希望能给到你帮助~

欢迎关注 IT果力成,一起交流学习
Python中的切片(Slice)操作详解文章来源地址https://www.toymoban.com/news/detail-427612.html

到了这里,关于Python中的切片(Slice)操作详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SystemVerilog中的切片操作

    在硬件描述语言中,信号切片操作是指对信号中的某个或某几个位进行访问或操作 其中, signal_name 是要进行切片操作的信号名, start_index 是切片的起始位置, length 是切片的长度。 例如,如果有一个32位的信号 my_signal ,需要获取该信号的第16到第23个位(包括第16和第23个位

    2024年02月02日
    浏览(43)
  • pytorch中的矩阵切片操作完全讲解

    我们经常需要从2维或3维tensor中进行切片操作,比如从mask模型中取出mask所在位置的向量。 Talk is cheap, show me code.  以下所有维度从0开始,3维即 0,1,2 ----------------------------------------------------- 另外,pytorch的函数已经为 这种切片操作准备好了,用以下代码: batch[\\\"loss_ids \\\"] 是

    2024年02月14日
    浏览(42)
  • Python Slice函数:数据处理利器详解

      在Python编程中,处理数据是一个非常常见且重要的任务。为了更高效地处理数据,Python提供了许多内置函数和方法。其中,slice()函数是一个非常强大且常用的工具,它可以帮助我们轻松地提取、操作和处理数据。无论是字符串、列表还是元组,slice()函数都能够胜任。本文

    2024年01月22日
    浏览(42)
  • 理解 Go 中的切片:append 操作的深入分析(篇2)

    理解 Go 语言中 slice 的性质对于编程非常有益。下面,我将通过代码示例来解释切片在不同函数之间传递并执行 append 操作时的具体表现。 本篇为第 2 篇,当切片的容量 cap 不够时 输出: 解释:在 test1 函数中,我们首先将 slice2 的第一个元素设为 1(这个更改也反映在 slice1

    2024年02月13日
    浏览(34)
  • Pytorch 张量操作 Python切片操作

    梳理一下Pytorch的张量切片操作 一维向量的操作其实很像numpy一维数组,基本定义如下: 1.默认步长为1 2.起始索引:结束索引 是一个**左闭右开区[)**间,即结束索引的值不取 3.有反向索引,具体如下: [起始索引:结束索引:步长] 对于一维向量而言,操作使用 冒号 :,而对于

    2023年04月09日
    浏览(52)
  • python中的切片

    目录 一.切片的基础用法 二.切片是一个伪独立的对象  三.切片可作为占位符         众所周知,我们可以通过索引来查找序列类型(字符串,列表,元组...)中的单个元素。而 切片是一种截取索引片段的技术,借助切片技术,我们可以十分灵活的处理序列类型的对象。  

    2024年02月09日
    浏览(39)
  • Python的切片操作详细用法解析

    在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器。理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任意切取目标值。切片操作的基本语法比较简单,但如果不彻底搞清

    2024年02月02日
    浏览(50)
  • Python 列表切片详解

         切指–将某些东西切成小块。列表切片是从 原始列表中提取列表的一部分 的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。      Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。  存储对

    2023年04月08日
    浏览(38)
  • Python列表操作指南:索引、切片、遍历与综合应用

    列表(List)是Python中最常用的数据结构之一,它可以存储多个元素,并且支持对元素的索引和切片操作。本文将介绍列表的基本操作和常用方法。 通过方括号 [] 来创建一个列表,可以是空列表或包含元素的列表。例如: 列表中的元素按照插入顺序存储,并且每个元素都有一

    2024年02月09日
    浏览(51)
  • 一文详解python中的数据库操作

    最近做毕设,需要添加个数据库,记录一下。 重点介绍数据库API接口中的连接对象和游标对象 1. 连接对象 数据库连接对象主要提供获取数据库游标对象和提交/回滚事务的方法,以及关闭数据库连接。 使用connect函数获取对象,该函数有多个参数: host 主机名 database/db 数据库

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包