1.1 slice() 功能
slice()是Python内置函数之一,用于创建切片对象。切片对象可以用于对序列进行切片操作,如字符串、列表、元组等。
1.2 slice() 函数语法格式
slice(start, stop[, step])
- 参数解释:
其中,start、stop和step都是可选参数,分别表示切片的起始位置、终止位置和步长。
如果不指定start,则默认从序列的起始位置开始;
如果不指定step,则默认为1。
step不能为0。
slice()函数返回的是一个切片对象,可以用于对序列进行切片操作。
slice()函数的参数解释:
start:切片的起始位置,可以省略。如果省略了start,则默认从序列的第一个元素开始。
stop:切片的终止位置,必须指定。切片操作将会包括序列中从start到stop之间的所有元素,但不包括stop位置上的元素。
step:切片的步长,可以省略。如果省略了step,则默认为1。步长表示每隔多少个元素进行一次切片操作。
slice()函数返回一个切片对象,可以用于对序列进行切片操作。例如:
lst = [1, 2, 3, 4, 5]
s = slice(1, 4)
lst[s] # [2, 3, 4]
使用切片对象对序列进行切片操作时,语法格式为:
lst[start:stop:step]
lst = [1, 2, 3, 4, 5]
s = slice(1, 4)
lst[s] # [2, 3, 4]
lst[1:4] # [2, 3, 4]
1.3 slice() 优缺点
slice()函数的优点是可以动态生成切片对象,从而灵活地对序列进行切片操作。缺点是创建slice对象需要额外的内存开销。
1.4 slice() 示例
items = [0, 1, 2, 3, 4, 5, 6]
a = slice(2, 4)
print(items[2:4]) # [2, 3]
print(items[a]) # [2, 3]
items[a] = [10, 11]
print(items) # [0, 1, 10, 11, 4, 5, 6]
del items[a]
print(items) # [0, 1, 4, 5, 6]
首先,定义了一个包含7个元素的列表items,其元素分别为[0, 1, 2, 3, 4, 5, 6]。
接着,使用slice()函数创建了一个切片对象a,其起始位置为2,终止位置为4,但不包括位置4本身,即a代表的是序列items中的元素[2, 3]。
然后,分别使用切片操作和切片对象a对列表items进行了操作:
print(items[2:4])输出列表items中下标为2到3的元素,即[2, 3]。
print(items[a])输出切片对象a所代表的元素,即[2, 3]。
items[a] = [10, 11]将切片对象a所代表的元素[2, 3]替换为[10, 11],此时列表items变为[0, 1, 10, 11, 4, 5, 6]。
del items[a]删除切片对象a所代表的元素,即[2, 3],此时列表items变为[0, 1, 4, 5, 6]。
1.5 slice.indices()
- slice.indices()是Python中slice类型的一个方法,用于计算一个切片在给定序列中的实际起始、终止和步长值,以便进行手动切片操作。
s = slice(1, 5, 2)
seq = [0, 1, 2, 3, 4, 5, 6]
start, stop, step = s.indices(len(seq))
result = []
for i in range(start, stop, step):
result.append(seq[i])
print(result) # [1, 3]
首先创建了一个切片对象s,其起始位置为1,终止位置为5,步长为2。
然后创建了一个序列seq,包含了0到6共7个元素。
接着调用s.indices(len(seq))方法,将序列的长度作为参数传递给这个方法,计算出了实际的切片起始、终止和步长值,并将它们分别赋值给变量start、stop和step。
最后使用for循环遍历了切片范围内的所有元素,并将它们添加到结果列表result中。
最终输出了结果[1, 3],即序列seq中下标为1和3的元素。
- slice.indices()方法的语法格式为
slice.indices(length) -> (start, stop, step)
该方法接受一个参数length,表示序列的长度。
该方法返回一个元组(start, stop, step),表示在给定序列中,使用当前slice对象进行切片时的实际起始、终止和步长值。
如果start、stop或step的值超出序列的边界,则会自动调整为合法的值。