python 切片用法,python切片的具体操作方法有

  python 切片用法,python切片的具体操作方法有

  33559 www。建D6爸爸

  在正面写下:

  在用python解决问题的过程中,经常会从一个对象中提取一些值。“切片”操作是实现这一目标的有力武器。理论上,如果条件表达式合适,任何目标值都可以通过一个或多个切片操作来切割。切片操作的基本语法比较简单,但是如果没有彻底理清内部逻辑,就很容易出现错误,而且这种错误有时隐藏得很深,很难察觉。本文用详细的例子总结了切片操作的各种情况。以下都是列表类型的主题,结论也可以推广到其他切片对象。

  首先,Python可共享对象的索引方法

  有两部分:正指标和负指标,如下图所示。拿对象a=[0,1,2,3,4,5,6,7,8,9]列出一个例子。

  Python索引方法。使用jpeg文件交换格式存储的编码图像文件扩展名

  二。Python切片操作的一般方式

  的完整切片表达式包含两个“:”,它们分隔三个参数:start_index、end_index和step。如果只有一个“:”,默认第三个参数step=1;如果没有:,start_index=end_index意味着剪切start_index指定的元素。

  切片的基本表达式:object[start _ index:end _ index:step]step:可以是正的,也可以是负的。它的绝对值决定了“步长”,符号决定了切割数据时的“切割方向”。这意味着从左到右取值。如果省略step,默认值为1,即在step 1中从左向右取值。“拦截方向很重要!”“切断方向很重要!”“切断方向很重要!”重要的事情说三遍!

  Start_index:表示起始索引。包含对应于此索引的值。如果省略此参数,则意味着从对象的终点开始,是从起点还是终点开始取决于step参数的符号,而step正好从起点开始,而

  End_index:表示结束索引。不包含对应于此索引的值。如果省略该参数,则意味着已经获取了数据的“终点”。是“起点”还是“终点”,也是由步长参数的正负决定的。以step为例,正或负时为“终点”。

  三。Python切片操作的详细示例

  下面的例子以list对象a=[0,1,2,3,4,5,6,7,8,9]为例。

  A=[0,1,2,3,4,5,6,7,8,9]1。去掉元素

  A[0]0a[-4]6如果索引只有一个数,说明你要切一个元素。2.剪切整个对象。

  A[:] #从左至右[0,1,2,3,4,5,6,7,8,9] a [:3360] #从左至右[0,1,2,3,4,5,6,7,8,9]

  A [1:6] [1,2,3,4,5] step=1,从左到右取值。start_index=1到end_index=6也意味着从左到右取值。

  A[1:6:-1] []输出为空列表,表示无法获取数据。Step=-1决定从右到左取值,start_index=1到end_index=6决定从左到右取值,因矛盾为空。

  A[6:2] []也将作为空列表输出。Step=1确定从左到右的值,而start_index=6到end_index=2确定从右到左的值。因为两者的矛盾,所以是空的。

  A [:6] [0,1,2,3,4,5] step=1表示从左向右取值,省略start_index表示从终点开始,所以这里的终点就是“起点”,也就是“

  A [:63360-1] [9,8,7] step=-1,因为省略了start_index,表示从终点开始,所以这里的终点就是终点,即终点的值为9或9。

  A[63360][6,7,8,9]step=1,从左到右取值,从start_index=6到“end point”值9。

  一个[ 633603360-1 ] [ 6,5,4,3,2,1,0 ]步长=

  -1,从右向左取值,从start_index=6开始,到达“起点”0。4.start _ index和end_index都是负(-)索引的情况

  A[-1:-6] []step=1,从左到右取值,而start_index=-1到end_index=-6确定从右到左取值。两者是矛盾的,所以是空的。索引-1在-6的右边(如上所示)

  A[-1:-6:-1] [9,8,7,6,5]step=-1,值从右向左取,start_index=-1到end_index=-6的值也从右向左取。索引-1在6的右边(如上所示)

  A[-6:-1] [4,5,6,7,8]step=1,从左到右取值,而start_index=-6到end_index=-1也从左到右取值。索引-6在-1的左边(如上所示)

  A[:-6] [0,1,2,3]step=1,从左到右取值,从“起点”开始,一直到end_index=-6(不含此点)。

  A[:-6:-1] [9,8,7,6,5]step=-1,从右到左取值,从“终点”开始,一直到end_index=-6(不含此点)。

  A[-6:] [4,5,6,7,8,9]step=1,从左到右取值,从start_index=-6开始,一直到“终点”。

  A[-6:-1] [4,3,2,1,0]step=-1,从右向左取值,从start_index=-6开始,一直到“起点”。5.start _ index和end_index的混合索引为正()负(-)。

  A[1:-6] [1,2,3]start_index=1在end_index=-6的左边,所以从左到右取值,step=1也从左到右确定值,所以结果是正确的。

  A[1:-6:-1] []start_index=1在end_index=-6的左边,所以它从左到右取值,但是step=-从右到左确定值。两者是矛盾的,所以是空的。

  A[-1:6] []start_index=-1在end_index=6的右边,所以从右到左取值,但是step=1从左到右确定值。两者是矛盾的,所以是空的。

  A [-1: 6:-1] [9,8,7] start _ index=-1在end_index=6的右边,所以从右向左取值,而step=-1也是从右向左取值,所以结果是正确的。6.多层切片操作

  A[:8][2:5][-1:] [4]等价于:A [:8]=[0,1,2,3,4,5,6,7] A [:8] [2: 5]=[2,3,4] A [ 7。切片操作的三个参数可以用表达式表示。

  A[2 1:3*2:7%3] [3,4,5]即:a[2 1:3*2:7%3]=a[3:6:1] 8。其他对象的切片操作

  前面的切片操作是以list对象为例来说明的,但实际上可以切片的数据类型有很多,包括元组、字符串等等。

  (0,1,2,3,4,5)[:3] (0,1,2)元组的切片操作

  “ABCDEFG”[:2]“ACEG”字符串的切片操作

  对于range (1,100)中的I[2:3][-5:]:print(I)8790939699是用range()函数生成一个1-99的整数,然后取start_index=2(即3)到step=3的值直到最后,再取新序列中的后五个数。四、常用切片操作

  1.采取平衡位置

  B=a[:2][0,2,4,6,8] 2。采取奇怪的立场

  B=a[1:2][1,3,5,7,9] 3。复制整个对象。

  B=a [:] # print (b) # [0,1,2,3,4,5,6,7,8,9]PRINT(ID(A))# 41946376 PRINT(ID(B))# 41921864或B=A . copy(9)PRINT(ID(A))# 39783752 PRINT(ID(B))# 39759176注:[:]和.copy()都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用方式共享,而非独立分配内存。如果需要彻底拷贝,应采用“深度拷贝”方法,如下例所示:

  A=[1,2,[a , b]] print (a={} 。format (a)) b=a [:] b [0]=9 #修改B的最外层元素,将1改为9b[2][0]=D #修改嵌入层元素print (a={} 。format (a)) print (b={} 。格式(b))打印( id (a)={} 。format (id (a)) [A , B]] # Original AA=[1,2,[D , B] # B将内部元素A修改为D后,A中的A也变成了D,表示内部嵌套元素是共享的,但外部元素1保持不变。B=[9,2,[D , B]] #修改后的bid(a)=38669128id(b)=38669192 4。修改单个元素

  A [3]=[a , b] [0,1,2,[a , b],4,5,6,7,8,9] 5。在特定位置插入元素

  A [3: 3]=[A , B , C] [0,1,2, A , B , C ,3,4,5,6,7,8,9] A [0: 0]=[A。

  A [3: 6]=[a , b] [0,1,2, a , b ,6,7,8,9]五、小结

  (1) start_index、end_index和step都可以是正的、负的或正和负的混合。但必须遵循一个原则,即当start_index所代表的实际位置在end_index的左侧时,应该从左到右取值,然后step必须是正数(也就是从左到右的意思);当start_index表示的实际位置在end_index的右侧时,意味着从右向左取值。此时,step必须为负(也指从右向左),即两者取值的顺序必须相同。

  (2)当省略start_index或end_index时,值的起始索引和结束索引由step的正负决定。在这种情况下,值的方向不会有矛盾(即不会返回空列表[]),但是正反结果的顺序是相反的,因为一个向左,一个向右。

  (C)必须考虑步骤的正反两面,尤其是当步骤被省略时。比如a[-1:]很容易被误认为是从“终点”出发,一直到“起点”,即a[-1:]=[9,8,7,6,5,4,3,2,1,0],而实际上是a[-1:]=[9](注

  (D)注意:“取单个元素(不带“:)”时,返回对象的一个元素,其类型由元素本身的类型决定,与父对象无关。比如上面的a[0]=0,a[-4]=6,元素0和6是“数值型”,而父对象A在“取连续切片(带“:)”时是“列表型”,返回的结果类型与父对象相同,即使取的连续切片只包含一个元素,比如上面的a[-1:]=[9],返回的是只包含元素“9”的列表,而不是数值型“9”。

  作者:马尔代夫马尔代夫

  链接:https://www.jianshu.com/p/15715d6f4dad

  来源:简书

  版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: