zoukankan      html  css  js  c++  java
  • &【05】Python 彻底搞懂分片操作

    作者:马尔代夫Maldives
    链接:https://www.jianshu.com/p/15715d6f4dad
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    写在前面:

    利用python解决问题的过程中,经常会遇到从某个对象中抽取部分值的情况。“切片”操作正是专门用于实现这一目标的有力武器。理论上,只要条件表达式得当,可以通过单次或多次切片操作实现任意目标值切取。切片操作的基本语法比较简单,但如果不彻底搞清楚内在逻辑,也极容易产生错误,而且这种错误有时隐蔽得较深,难以察觉。本文通过详细例子总结归纳了切片操作的各种情形,下文均以list类型作为实验对象,其结论可推广至其他可切片对象。

    一、 Python可切片对象的索引方式

    包括:正索引和负索引两部分,如下图所示,以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

    img

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

    一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时,默认第三个参数step=1;当一个“:”也没有时,start_index=end_index,表示切取start_index指定的那个元素。

    切片操作基本表达式:object[start_index:end_index:step]

    step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情说三遍!

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

    end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,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, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # 当索引只有一个数时,表示切取某一个元素。
    print(a[0])
    print(a[-4])
    2. 切取完整对象
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[:])# 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 从左往右
    print(a[::])# 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 从左往右
    print(a[::-1])# 输出 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 从右往左
    3. start_index和end_index全为正(+)索引的情况
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[1:6])#输出 [1, 2, 3, 4, 5]
    # step=1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[1:6:-1])# 输出 []
    # 输出为空列表,说明没取到数据。
    # step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾,所以为空。
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[6:2]) # 输出 []
    # 同样输出为空列表。
    # step=1,决定了从左往右取值,而start_index=6到end_index=2决定了从右往左取值,两者矛盾,所以为空。
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[:6])# 输出 [0, 1, 2, 3, 4, 5]
    # step=1,表示从左往右取值,而start_index省略时,表示从端点开始,因此这里的端点是“起点”,即从“起点”值0开始一直取到end_index=6(该点不包括)。
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[:6:-1])  # 输出 [9, 8, 7]
    # step=-1,从右往左取值,而start_index省略时,表示从端点开始,因此这里的端点是“终点”,即从“终点”值9开始一直取到end_index=6(该点不包括)。
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[6:])  # 输出 [6, 7, 8, 9]
    # step=1,从左往右取值,从start_index=6开始,一直取到“终点”值9。
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(a[6::-1])  # 输出 [6, 5, 4, 3, 2, 1, 0]
    # step=-1,从右往左取值,从start_index=6开始,一直取到“起点”0。
    4. start_index和end_index全为负(-)索引的情况
  • 相关阅读:
    python模块--time模块
    python模块--如何相互调用自己写的模块
    Animating Views Using Scenes and Transitions
    fragment 切换
    android textview 设置text 字体
    android intent 5.1
    android EditView ime
    animation of android (4)
    animation of android (3)
    animation of android (2)
  • 原文地址:https://www.cnblogs.com/doagain/p/15521602.html
Copyright © 2011-2022 走看看