切片

在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