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的值超出序列的边界,则会自动调整为合法的值。