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'