zoukankan      html  css  js  c++  java
  • 【python cookbook】【数据结构与算法】11.对切片命名

    问题:如何清理掉到处都是硬编码的切片索引

    解决方案:对切片命名

    假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结构的记录文件):

    ########0123456789012345678901234567890123456789012345678901234567890123456789
    record='....................100.......513.25..........'
    cost=int(record[20:23])*float(record[30:36])

    与其这样做,倒不如对切片进行命名:避免了使用许多神秘难懂的硬编码索引,代码变得清晰许多。

    SHARES=slice(20,23) #对切片命名
    PRICE=slice(30,36)  #对切片命名
    
    cost=int(record[SHARES])*float(record[PRICE])

    一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。

    >>> items=[0,1,2,3,4,5,6]
    >>> a=slice(2,4)
    >>> a
    slice(2, 4, None)
    >>> items[a]
    [2, 3]
    >>> items[2:4]
    [2, 3]
    >>> items[a]=[77,88]
    >>> items
    [0, 1, 77, 88, 4, 5, 6]
    >>> del items[a]
    >>> items
    [0, 1, 4, 5, 6]
    >>> 

    如果有一个slice对象的实例s,可以分别通过s.start、s.stop以及s.step属性来得到关于该对象的信息。

    >>> items=[0,1,2,3,4,5,6]
    >>> a=slice(2,4)
    >>> a
    slice(2, 4, None)
    >>> a.start
    2
    >>> a.stop
    4
    >>> a.step
    >>> b=slice(1,5,2)
    >>> b
    slice(1, 5, 2)
    >>> b.start
    1
    >>> b.stop
    5
    >>> b.step
    2
    >>> 

    另外,可以通过使用indices(size)方法将切片映射到特定大小的序列上。这会返回一个(start,stop,step)元组,所有的值都已经恰当地限制在边界以内(当做索引操作时可避免出现IndexError异常)

    >>> items=[0,1,2,3,4,5,6]
    >>> a=slice(2,4)
    >>> a
    slice(2, 4, None)
    >>> a.start
    2
    >>> a.stop
    4
    >>> a.step
    >>> b=slice(1,5,2)
    >>> b
    slice(1, 5, 2)
    >>> b.start
    1
    >>> b.stop
    5
    >>> b.step
    2
    >>> s='HelloWorld'
    >>> a.indices(len(s))
    (2, 4, 1)
    >>> b.indices(len(s))
    (1, 5, 2)
    >>> items[a]
    [2, 3]
    >>> items[b]
    [1, 3]
    >>> for i in range(*a.indices(len(s))):
        print(s[i])
    
        
    l
    l
    >>> for i in range(*b.indices(len(s))):
        print(s[i])
    
        
    e
    l
    >>> c=slice(0,8,2)
    >>> c
    slice(0, 8, 2)
    >>> for i in range(*c.indices(len(s))):
        print(s[i])

        
    H
    l
    o
    o
    >>>
  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/apple2016/p/5746817.html
Copyright © 2011-2022 走看看