《流畅的python》读书笔记(5)
2020-01-31 22:45
113 查看
2.4切片
# 一个切片的简单实例 l = [10, 20, 30, 40, 50, 60] print(l[:2]) # 分割至下标为2 的元素之前 [10, 20] print(l[2:]) # 从下表为2的元素开始向后分割 [30, 40, 50, 60] print(l[:3]) # 分割至下标为3 的元素之前 [10, 20, 30] print(l[3:]) # 从下表为3的元素开始向后分割 [40, 50, 60] # 可以利用任意一个下标来把序列分割成不重叠的两部分,只要写成 # my_list[:x] 和 my_list[x:] 就可以了 # 当起止位置信息都可见时,我们可以快速计算出切片和区间的长度,用后一个数减去 # 第一个下标(stop - start)即可 # 用 s[a:b:c] 的形式对 s 在 a 和 b 之间以 c 为间隔 # 取值。c 的值还可以为负,负值意味着反向取值 s = 'bicycle' print(s[::3]) #从第一个元素开始到末尾 每隔三个元素取一个 包括第三个元素 bye print(s[::-1]) # 从尾到头 每隔一个元素取一个 elcycib print(s[::-2]) # 从尾到头 每隔两个元素取一个 eccb
另一个切片实例
invoice = """ 0.....6................................40........52...55........ 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的 切片对象 切割0 - 6 SKU = slice(0, 6) # 创建一个名为DESCRIPTION的 切片对象 切割6-40 其余的也类似 DESCRIPTION = slice(6, 40) UNIT_PRICE = slice(40, 52) QUANTITY = slice(52, 55) ITEM_TOTAL = slice(55, None) # line_items = invoice.split('\n') # print(line_items) ''' ['', '0.....6................................40........52...55........', '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', ''] ''' line_items = invoice.split('\n')[2:] # print(line_items) ''' ['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'] ''' for item in line_items: print(item[UNIT_PRICE], item[DESCRIPTION])
多维切片和省略
多维切片,对于这部分 起始就是一维的拓展,不再赘述 省略:省略(ellipsis)的正确书写方法是三个英语句号(...) 可以当作切片规范的一部分,也可以用在函数的参数清单中,比如 f(a, ..., z),或 a[i:...]
给切片赋值
如果把切片放在赋值语句的左边,或把它作为 del 操作的对象,我们就可以对序列进行
嫁接、切除或就地修改操作
l = list(range(10)) print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] l[2:5] = [20, 30] # 将l[2] l[3] l[4] 分别赋值为 20 30 "" print(l) # [0, 1, 20, 30, 5, 6, 7, 8, 9] del l[5:7] # 删除l中的 l[5] l[6] print(l) # [0, 1, 20, 30, 5, 8, 9] l[3::2] = [11, 22] # 从 3 开始 每隔两个 替换一个值 分别替换为 11,22 print(l) # [0, 1, 20, 11, 5, 22, 9] # l[2:5] = 100 #会报错,如果赋值的对象是一个切片, # 那么赋值语句的右侧必须是个可迭代对象。即便只有单独一个值,也要把它转换成可迭代的序列 l[2:5] = [100] print(l) # [0, 1, 100, 22, 9]```
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 《流畅的python》读书笔记(7)
- 《流畅的python》读书笔记(6)
- 读书笔记《c语言深度解剖》(5)
- 《HTTP权威指南》读书笔记---TCP/IP
- 读书笔记01 Programming Interviews Exposed 3rd ed
- 拉姆斯菲尔德规则读书笔记
- MYSQL必知必会读书笔记 第五章 排序检索数据
- 《 中国式思维》曾仕强读书笔记
- [读书笔记]Binary Hancks(1)
- 《权力》读书笔记,第4章 成为最引人注目的那一个
- 《Linux内核设计与实现》读书笔记 - 目录 (完结)
- 《设计模式》读书笔记
- 《Linux内核设计与实现》第17章读书笔记
- UNIX环境高级编程-读书笔记-系统文件信息
- 长尾理论读书笔记:第十三章 娱乐业之外
- mono_for_android读书笔记之真机调试
- 《java解惑》读书笔记4——循环谜题
- Chapter 16 notification iOS 8 -Swift Programming cookBook 读书笔记
- 1 Introduction to Oracle Database读书笔记
- 读书笔记-《Spring技术内幕》-计文柯(三):Spring MVC与We