zoukankan      html  css  js  c++  java
  • 分片

    1 #索引用来对单个元素进行访问,使用分片可以对一定范围内的元素进行访问,分片通过冒号相隔的两个索引实现。
    2 >>>number=[1,2,3,4,5,6,7,8,9,10]
    3 >>>number[1:3]             #取索引为第一和第二的元素
    4 [2,3]
    5 >>>number[-3:-1]          #负数从右开始计数,取得倒数第三和倒数第二的元素
    6 [8,9]
    7 #因此可以看出,分片既支持正数索引,也支持负数索引。
     1 #分片的实现需要提供两个索引作为边界,第一个索引的元素包含在分片内,第二个索引的元素不包含在分片内。像数学里的a≤x<b,x是我们需要得到的元素,a是分片操作中的第一个索引,b是第二个索引,b不包含在x的范围内。
     2 >>>number=[1,2,3,4,5,6,7,8,9,,10]
     3 >>>number[7:10]      #取最后3个元素
     4 [8,9,10]
     5 >>>number[10]        #超出索引范围
     6 Traceback (most recent call last):
     7   File "<pyshell#31>", line 1, in <module>
     8     number[10]
     9 IndexError: list index out of range
    10 #number的编号最大应该为9,编号为10指向的是第11个元素,是一个不存在的元素,但是由于在最后一个元素之后,因此能得到最后一个元素
    11 >>>number=[1,2,3,4,5,6,7,8,9,10]
    12 >>>number[-3:-1]
    13 [8,9]
    14 #没有输出最后一个元素。再试试使用索引0作为最后一个元素的下一个元素,输入如下:
    15 >>>number[-3:0]
    16 []
    17 #输出并没有数值。分片中最左边的索引比它右边的索引晚出现在序列中,结果就是一个空序列。比如上例中,-3代表倒数第三个元素,0代表第一个元素,倒数第三个元素比第一个元素晚出现,即排在第一个元素后面,所以得到的结果是空序列。
    18 #那么我们如何通过负数索引的方式取得最后一个元素呢?要取得的分片包括序列结尾的元素,只需将第二个索引设置为空即可。输入如下:
    19 >>>number[-3:]
    20 [8,9,10]
    1 #正数索引亦可使用这种方法,输入如下:
    2 >>>number[0:]           #从第一个元素开始输出,输出全部结果
    3 [1,2,3,4,5,6,7,8,9,10]
    4 >>>number[:0]           #最后一个元素为第一个,输出为空
    5 []
    6 >>>number[:3]           #取得前3个元素
    7 [1,2,3]
    1 #根据上述输出结果可知,若需要输出整个序列,则可以将两个索引都设置为空。输入如下:
    2 >>>number[:]
    3 [1,2,3,4,5,6,7,8,9,10]
    4 #输出结果就是整个序列
    1 #进行分片时,分片的开始和结束点都需要指定(无论是直接还是间接),用这种方式取连续的元素没有问题,但若要取序列中不连续的元素就比较麻烦,或者直接不能操作。比如要取序列number中所有的奇数,以一个序列展示出来,用前面的方法就不能实现了
    2 #对于上面这种情况,Python为我们提供了另一个参数--步长,该参数通常是隐形设置的。在普通分片中,步长是1.分片操作就是按照这个步长逐个遍历序列的元素,遍历后返回开始和结束点之间的所有元素。也可以理解为默认步长是1,即没有设置步长时,步长隐形设置值为1,输入如下
    3 >>>number[0:10:1]      #设置步长值为1
    4 [1,2,3,4,5,6,7,8,9,10]
    5 >>>number[0:10:2]      #设置步长值为2
    6 [1,3,5,7,9]
    7 #由上面的输出结果可以看到,对于number序列,设置步长为2时,得到的结果就是我们前面想要的奇数序列。
     1 #由结果可知,步长设置为大于1的数时,会得到一个跳过某些元素的序列。例如,我们上面设置的步长为2,得到的序列是从开始到结束每隔1个元素的序列。比如还可以这样使用:
     2 >>>number[0:10:3]
     3 [1,4,7,10]
     4 >>>number[2:6:3]
     5 [3,6]
     6 >>>number[2:5:3]
     7 [3]
     8 >>>number[1:5:3]
     9 [2,5]
    10 #由以上输出可以看到,使用步长的方式还是很灵活的。
     1 #除了上面的使用方式外,设置前面两个索引为空的捷径也可以使用。如下
     2 >>>number[::3]    
     3 [1,4,7,10]
     4 上面的操作将序列中每3个元素的第一个提取出,前面两个索引都设置为空。步长设置为0是否可行呢?输入如下:
     5 >>>number[::0]
     6 Traceback (most recent call last):
     7   File "<pyshell#56>", line 1, in <module>
     8     number[::0]
     9 ValueError: slice step cannot be zero
    10 输出结果告诉我们步长不能为0.
     1 步长能否设置为负数呢?输入如下:
     2 >>>number[10:0:-2]
     3 [10,8,6,4,2]
     4 >>>number[0:10:-2]
     5 []
     6 >>>number[::-2]
     7 [10,8,6,4,2]
     8 >>>number[5::-2]
     9 [6,4,2]
    10 >>>number[:5:-2]
    11 [10.8]
    12 >>>number[::-1]
    13 [10,9,8,7,6,5,4,3,2,1]
    14 >>>number[10:0:-1]       #第二索引为0,取不到序列中的第一个元素
    15 [10, 9, 8, 7, 6, 5, 4, 3, 2]
    16 >>>number[10::-1]         #设置第二个索引为空,可以去到序列的一个元素
    17 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    18 >>>number[2::-1]           #设置第二个索引为空,可以去到序列的一个元素
    19 [3,2,1]
    20 >>>number[2:0:-1]         #设置第二个索引为0,取不到序列中的第一个元素
    21 [3, 2]
    22 #使用负数的步长和使用正数的步长的结果是相反的。对于正数步长,Python会从序列的头部开始向右提取元素,直到最后一个元素;对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素,正数步长必须让开始点小于结束点,而负数步长必须让开始点大于结束点。
  • 相关阅读:
    java中生成流水号的一个例子(使用关系型数据库)
    润乾报表锁定表头的实现方法
    android DVM
    SAX与DOM解析XML的区别
    RunnableException与CheckedException
    android 内存管理机制、异常、垃圾回收
    单元测试
    SAP C4C url Mashup的跳转工作原理
    SAP Cloud for Customer的Mashup位于CustomPane里
    SAP C4C的URL Mashup无法添加到embedded component里去
  • 原文地址:https://www.cnblogs.com/DLHe/p/7661237.html
Copyright © 2011-2022 走看看