xyzjr 发表于 2017-4-23 14:04:14

Python入门 切片

  切片 (Java中的截取字符串和数组)
  取一个list的部分元素是非常常见的操作。
比如,一个list如下:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
取前3个元素,应该怎么做?
笨办法:

>>> , L, L]
['Adam', 'Lisa', 'Bart']
  如果要去的数量多时,可以用循环:
取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:

>>> r = []
>>> n = 3
>>> for i in range(n):
...   r.append(L)
...
>>> r
['Adam', 'Lisa', 'Bart']
  对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
对应上面的问题,取前3个元素,用一行代码就可以完成切片:

>>> L
['Adam', 'Lisa', 'Bart']
  从索引0开始取,直到索引3,但不包括索引3.
  如果第一个索引是0,可以省略:L[:3]
  只用一个:,表示取从头到尾,因此,L[:]实际上复制除了一个新的list。

切片操作还可以指定第三个参数:

>>> L[::2]
['Adam', 'Bart']
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
  把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
  倒序切片:
对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L[-2:]
['Bart', 'Paul']
>>> L[:-2]
['Adam', 'Lisa']
>>> L[-3:-1]
['Lisa', 'Bart']
>>> L[-4:-1:2]
['Adam', 'Bart']
记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
  对字符串切片:
字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[-3:]
'EFG'
>>> 'ABCDEFG'[::2]
'ACEG'
页: [1]
查看完整版本: Python入门 切片