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]```