• python学习之路(11)


    切片


    取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:

    >>> list=['zh','cn','sqlmap','nmap','znamp']

    取前3个元素,应该怎么做?

    笨办法:

    >>> list=['zh','cn','sqlmap','nmap','znamp']
    >>> list1=[list[0],list[1],list[2]]
    >>> list1
    ['zh', 'cn', 'sqlmap']

    之所以是笨办法是因为扩展一下,取前N个元素就没辙了。

    取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:

    >>> r=[]
    >>> n=3
    >>> for i in range(n):
        r.append(list[i])
    
        
    >>> r
    ['zh', 'cn', 'sqlmap']

    对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

    对应上面的问题,取前3个元素,用一行代码就可以完成切片:

    >>> list[0:3]
    ['zh', 'cn', 'sqlmap']

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。

    如果第一个索引是0,还可以省略:

    >>> list[:3]
    ['zh', 'cn', 'sqlmap']

    也可以从索引1开始,取出2个元素出来:

    >>> list[2:4]
    ['sqlmap', 'nmap']

    类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

    >>> list[-1]
    'znamp'
    >>> list[-2:]
    ['nmap', 'znamp']
    >>> list[-3:-2]
    ['sqlmap']

    记住倒数第一个元素的索引是-1

    切片操作十分有用。我们先创建一个0-99的数列:

    >>> list=range(100)
    >>> list
    range(0, 100)

    可以通过切片轻松取出某一段数列。比如前5个数:

    >>> list[:5]
    range(0, 5)

    后10个数:

    >>> list1=list[-10:]
    >>> list1
    range(90, 100)

    前11-20个数:

    >>> list[10:20]
    range(10, 20)

    前10个数,每两个取一个:

    >>> list[:10:2]
    range(0, 10, 2)

    所有数,每5个取一个:

    >>> list[::5]
    range(0, 100, 5)

    甚至什么都不写,只写[:]就可以原样复制一个list:

    list[:]
    range(0,100)

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

    >>> tuple=(1,2,3,4,5,6,7,8,9)
    >>> tuple[:3]
    (1, 2, 3)

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

    >>> a='asdasdasdsadasdeqff'
    >>> a[-3:]
    'qff'
  • 相关阅读:
    详解Java API之正则表达式
    ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数
    ios NSTimer的强引用问题
    ionic 接触的第一个Hybrid项目
    iOS 小经验:UIAnimation空对象导致crash
    iOS GCD 必读推荐,有关于单例使用问题
    ios NSString 转 float的注意
    iOS UIViewController 和 nib 相关的3个方法
    ios delegate 使用注意 assign,weak
    ios 使用autolayout 后button 的frame 无法设置问题!
  • 原文地址:https://www.cnblogs.com/-zhong/p/10864005.html
Copyright © 2020-2023  润新知