切片

在Python 里,像列表(list)、元组(tuple)和字符串(str)这类序列类型都支持切片操作,但是实际上切片操作比我们所想象的要强大很多。下面是一些切片形式的用法。

对对象进行切片

>>> s = 'bicycle'
>>> s[::3]
'bye'
>>> s[::-1]
'elcycib'
>>> s[::-2]
'eccb'

a:b:c 这种用法只能作为索引或者下标用在 [] 中来返回一个切片对象:slice(a, b, c)。对 seq[start:stop:step] 进行求值的时候,Python 实际上会调用seq.__getitem__(slice(start, stop, step))
下面纯文本文件形式的收据以一行字符串的形式被解析

invoice = """
 1909  Pimoroni PiBrella                    $17.50    3    $52.50
 1489  6mm Tactile Switch x20                $4.95    2     $9.90
 1510  Panavise Jr. - PV-201                $28.00    1    $28.00
 1601  PiTFT Mini Kit 320x240               $34.95    1    $34.95
"""

SKU = slice(0, 6)
DESCRIPTION = slice(6, 40)
UNIT_PRICE = slice(40, 52)
QUANTITY = slice(52, 55)
ITEM_TOTAL = slice(55, None)
line_items = invoice.split('\n')

for item in line_items:
    print(item[UNIT_PRICE], item[DESCRIPTION])

$17.50    Pimoroni PiBrella                
$4.95    6mm Tactile Switch x20           
$28.00    Panavise Jr. - PV-201            
$34.95    PiTFT Mini Kit 320x240

对切片赋值
如果把切片放在赋值语句的左边,或把它作为 del 操作的对象,我们就可以对序列进行嫁接、切除或就地修改操作。

>>> l = list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[2:5] = [20, 30]
>>> l
[0, 1, 20, 30, 5, 6, 7, 8, 9]
>>> del l[5:7]
>>> l
[0, 1, 20, 30, 5, 8, 9]
>>> l[3::2] = [11, 22]
>>> l

你可能感兴趣的:(切片)