您的位置:首页 > 编程语言 > Python开发

《流畅的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]```
  • 点赞
  • 收藏
  • 分享
  • 文章举报
EEEEEEcho 发布了18 篇原创文章 · 获赞 3 · 访问量 536 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: