切片

在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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 先從原理上分析切片運算:list的切片,內部是調用__getitem__,__setitem__,__delite...
    編程技術閱讀 2,343評論 0 1
  • 本文翻譯自Rob Pike的文章《Arrays, slices (and strings): The mechan...
    大蟒傳奇閱讀 4,939評論 2 8
  • 我們總是喜歡拿“順其自然”來敷衍人生道路上的荊棘坎坷,卻很少承認,真正的順其自然,其實是竭盡所能之后的不強求,而非...
    喜龍愛慧閱讀 3,420評論 1 1
  • 之后的一年中,白天我可以毫無顧忌地大笑,說:“我忘了你。”可是,不眠的夜仍然太長,流的淚,泄露了我的悲傷。 我以為...
    七弦墨閱讀 384評論 0 0
  • API文檔可以幫助我們快速理解接口的調用方法,因此一份好的API文檔其實是非常重要的。但是對于開發者來說編寫API...
    codjust閱讀 5,332評論 1 3