本系列将会陆续整理分享一些的Python内置函数。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_built-in_functions
slice(stop)slice(start, stop, step=None)
-
参数说明:
-
start:切片的起始索引(包含); -
stop:切片的结束索引(不包含),必须指定; -
step:步长,表示每次跳过的元素数量。
-
返回值:
# 创建一个 slice 对象
s = slice(2, 7, 2)
# 访问属性
print(s.start) # 输出:2
print(s.stop) # 输出:7
print(s.step) # 输出:2
-
扩展索引语法
import numpy as np
arr = np.arange(20).reshape(4, 5)
print(arr[1:3, 2:4]) # 等价于 arr[(slice(1,3), slice(2,4))]
# 输出:[[ 7 8]
# [12 13]]
-
Python 3.12 的变化
# 创建一个具有可哈希属性的 slice 对象
s1 = slice(1, 5, 2)
# 将 slice 对象用作字典的键
my_dict = {s1: "示例切片"}
# 访问字典
print(my_dict[s1]) # 输出:示例切片
-
与itertools.islice的比较
import itertools
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 创建一个迭代器
my_iter = itertools.islice(my_list, 2, 7, 2)
# 遍历元素
for item in my_iter:
print(item) # 输出:2, 4, 6
下面是一些使用 slice() 函数的示例:
-
示例 1:基本使用
slice对象可以直接用于对序列进行切片操作。
# 创建一个列表
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 使用 slice() 创建切片对象
s1 = slice(2, 7, 2)
# 使用切片对象对列表进行切片
result = my_list[s1]
print(result) # 输出:[2, 4, 6]
# 等同于直接进行切片操作
print(my_list[2:7:2]) # 输出: [2, 4, 6]
# 省略 start 和 step 参数
s2 = slice(7) # 相当于 slice(0, 7, 1)
# 使用切片对象对字符串进行切片
result = my_list[s2]
print(result) # 输出:[0, 1, 2, 3, 4, 5, 6]
# 使用负索引和负步长
s3 = slice(-1, -8, -2) # 从倒数第1个元素开始,到倒数第8个元素结束(不包含),步长为-2
# 使用切片对象对元组进行切片
result = my_list[s3]
print(result) # 输出:[9, 7, 5, 3]
-
示例 2:自定义类支持切片
如果想让自定义类支持切片操作,需要在类中实现__getitem__方法。__getitem__方法通过索引或切片语法访问对象的元素。通过实现该方法来定义类的行为,使其能够处理切片操作。
class CustomList:
def __init__(self, data):
self.data = data
# 在类中实现 __getitem__方法时,需处理slice对象以支持切片操作
def __getitem__(self, index):
if isinstance(index, slice):
start, stop, step = index.indices(len(self.data))
return [self.data[i] for i in range(start, stop, step)]
else:
return self.data[index]
cl = CustomList(list(range(10)))
print(cl[slice(-1, -8, -2)]) # 输出 [9, 7, 5, 3]
print(cl[2:7:2]) # 输出 [2, 4, 6]


本篇文章来源于微信公众号: 码农设计师
