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'
原文地址:https://www.cnblogs.com/-zhong/p/10864005.html