《流畅的python》读书笔记(5)

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

发布了32 篇原创文章 · 获赞 6 · 访问量 918

猜你喜欢

转载自blog.csdn.net/EEEEEEcho/article/details/103866163