在本教程中,您将了解切片在 Python 中的工作原理以及如何使用它来操作字符串、列表和元组等序列。
我们还将演示 Python 切片对象如何创建可用于对序列进行切片的切片。
这些知识将为您提供一个强大的工具来访问序列中的多个项目,以删除多个项目或插入多个项目等方式管理它们。
准备好潜入了吗?我们走吧!
Python 索引和切片
索引和切片是 Python 的两个不可或缺的概念,用于访问序列中的元素,例如列表、字符串和元组。在这里,我们将讨论每个概念是什么,并提供示例来帮助您理解。
Indexing
索引是指使用索引访问序列中的各个元素。 Python 中的索引从第一个元素的 0 开始,并为每个后续元素增加 1。例如:
data = ['a', 'b', 'c', 'd', 'e']
print(data[1])
Output:
'b'
在此代码中,我们使用索引来访问列表中的第二个元素(“b”)。
Slicing
另一方面,切片允许您获取序列的子集(或“切片”)。它不仅限于单个元素 - 它可以一次性处理多个项目。例如:
print(data[1:3])
Output:
['b', 'c']
这里我们使用切片来获取列表的一部分。data[1:3]
返回一个新列表,其中包含从索引 1(包含)到 3(不包含)的项目。
Python 中的切片是如何工作的?
Python 中有两种主要的切片方法:使用切片表示法和使用slice()
功能。
以下是每项的概述:
切片符号
切片表示法可能是您最熟悉的。它简单易读。
切片符号如下所示:my_list[start:stop:step]
.
-
start
:切片开始的索引。如果省略,将从头开始。
-
stop
:切片将停止的索引。该索引不包含在切片中。
-
step
:指数增加的量。如果省略,则默认为 1。
示例1:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(my_list[1:7:2])
Output:
[1, 3, 5]
该切片返回一个列表,其中包含从索引 1 到索引 7(但不包括索引 7)的元素,步长为 2。
示例2:
print(my_list[2:])
Output:
[3, 4, 5, 6, 7, 8, 9]
该切片从索引 2 处的元素开始,包括到列表末尾的所有元素。
示例3:
print(my_list[:3])
Output:
[1, 2, 3]
该切片包含从列表开头到(但不包括)索引 3 处的元素的所有元素。
示例4:
print(my_list[2::2])
Output:
[3, 5, 7, 9]
该切片从索引 2 处的元素开始,并以步长 2 遍历列表,因此它包括从索引 2 到列表末尾的所有其他元素。
实施例5:
print(my_list[:3:2])
Output:
[1, 3]
该切片从列表的开头开始,在索引 3 之前结束,每隔一个元素(步骤 2)。
slice()
功能
The slice()
函数创建一个切片对象,然后您可以使用它来对序列进行切片。该函数采用与切片符号相同的三个参数(开始、停止、步骤)。
这是使用相同的示例slice()
功能:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
my_slice = slice(1, 7, 2)
print(my_list[my_slice])
Output:
[1, 3, 5]
其优点之一是slice()
功能是您可以创建一个切片对象一次并多次使用它,如果您在多个地方应用相同的切片,这可以使您的代码更干净、更高效。
此外,使用slice()
当切片索引是计算出来的或来自变量时,函数可能很有用,特别是在定义需要执行切片的函数或方法并且想要参数化切片边界的情况下。
创建切片对象
让我们看看如何使用以下命令创建和使用切片对象slice
功能。
这是一般语法slice
Python 中的函数:
slice(stop)
slice(start, stop, step)
-
start
: 这是可选的。一个整数,指定从哪个位置开始切片。默认值为“无”。
-
stop
: 一个整数,指定在哪个位置结束切片。
-
step
: 这是可选的。整数指定切片的步骤。默认值为“无”。
让我们看一些例子:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
slice_obj = slice(2, 6)
# Use the slice object
print(my_list[slice_obj])
Output:
[3, 4, 5, 6]
在这里,我们创建了一个切片对象start=2
and stop=6
。然后,我们使用这个切片对象对列表进行切片,从而产生从第三个元素到第六个元素的新列表。
切片对象也可以与字符串一起使用:
text = "Hello, World!"
slice_obj = slice(7, 12)
# Use the slice object
print(text[slice_obj])
Output:
World
在此示例中,我们创建了一个切片对象并用它来对字符串进行切片,生成子字符串“World”。
在大多数情况下,常规切片表示法就足够了,而且更常见,因为它通常更容易阅读和理解。
如何切片字符串以获得子字符串?
就像我们对列表进行切片一样,我们可以对字符串使用相同的切片技术来提取子字符串。以下是对字符串进行切片的方法:
text = "Hello, World!"
substring = text[7:12]
print(substring)
Output:
'World'
在此示例中,我们对从索引 7 开始到索引 12 之前结束的字符串进行切片,以提取子字符串“World”。
如何使用步长对字符串进行切片?
步长通常称为“步幅”,是 Python 切片中的第三个参数,用于控制切片中包含的每个项目之间要跳过的项目数量。
让我们深入研究一下在切片字符串时如何使用步长。
text = "Python Programming"
substring = text[::2]
print(substring)
Output:
'Pto rgamn'
在此 Python 示例中,我们使用的步长大小为 2,这会导致字符串中每隔一个字符出现一次。
我们从头开始(因为未指定开始),直到结束(因为未指定结束),并选择每隔一个字符。
如何从头到尾切割字符串?
Python 的切片机制还允许从末尾到开头对字符串进行切片。这是通过使用负步长值来实现的。其做法如下:
text = "Hello, Python!"
reverse_text = text[::-1]
print(reverse_text)
Output:
'!nohtyP ,olleH'
在此示例中,我们从末尾到开头对字符串进行了切片。这[::-1]
slice 的工作原理是从字符串末尾开始(由于未指定起始索引和结束索引,因此使用完整字符串),然后向后移动,如步长大小 -1 所示。
如何使用负索引进行切片?
我们可以使用负数作为起始索引,从末尾的特定位置开始切片。
让我们看看如何使用负索引进行切片。
字符串负索引
text = "Hello, World!"
substring = text[-6:-1]
print(substring)
Output:
'World'
在此示例中,我们使用负索引来提取子字符串“World”。切片[-6:-1]
从倒数第六个字符 ('W') 开始,到最后一个字符 ('!') 之前停止。
我们还可以在停止索引中使用负数:
text = "Hello, World!"
substring = text[-6:-7:-1]
print(substring)
Output:
W
列表负索引
同样的原则也适用于列表:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
slice_list = my_list[-4:-1]
print(slice_list)
Output:
[6, 7, 8]
在这里,我们使用负索引对列表进行了切片。切片[-4:-1]
从倒数第四个项目 (6) 开始,并在最后一个项目 (9) 之前停止。
如何对列表或元组进行切片?
在Python中,切片不仅仅适用于字符串。我们可以使用相同的技术来对列表和元组等序列进行切片。让我们用一些例子来说明这一点。
切片列表
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
slice_list = my_list[2:6]
print(slice_list)
Output:
[3, 4, 5, 6]
在此示例中,我们对从索引 2 开始到索引 6 之前结束的列表进行了切片。
元组切片
元组切片遵循相同的语法:
my_tuple = ('a', 'b', 'c', 'd', 'e')
slice_tuple = my_tuple[1:4]
print(slice_tuple)
Output:
('b', 'c', 'd')
在此示例中,我们对一个元组进行了切片,从索引 1 开始到索引 4 之前结束。
使用切片复制
您可以使用切片来创建序列的副本。语法[:]
or [::]
通常用于此目的。这将创建一个新列表,其中包含原始列表中的所有元素。
让我们看一个例子:
original_list = [1, 2, 3, 4, 5]
copied_list = original_list[:]
print(copied_list)
Output:
[1, 2, 3, 4, 5]
在这里,我们复制了original_list
使用切片并将其分配给copied_list
.
Now, copied_list
是一个单独的列表,具有相同的元素original_list
.
这种复制方式很有用,因为它创建了一个独立于原始列表的新列表。因此,对原始列表的更改不会影响复制的列表,反之亦然。
original_list[0] = 'a'
print("Original:", original_list)
print("Copied:", copied_list)
Output:
Original: ['a', 2, 3, 4, 5]
Copied: [1, 2, 3, 4, 5]
如您所见,修改original_list
不影响copied_list
.
将值分配给切片(切片分配)
Python 提供了将值分配给列表的一部分的能力。此操作通常称为“切片分配”。
如何更新物品?
您可以使用切片分配来更改列表的一部分。
下面是一个例子来证明这一点:
my_list = [1, 2, 3, 4, 5, 6]
my_list[1:4] = ['a', 'b', 'c']
print(my_list)
Output:
[1, 'a', 'b', 'c', 5, 6]
在此示例中,我们分配了列表['a', 'b', 'c']
到索引 1 到 4 的切片my_list
.
因此,第二个、第三个和第四个元素my_list
被替换。
如何追加项目?
您可以使用切片分配将新项目附加到现有列表,而无需覆盖任何项目,如下所示:
my_list = [1, 2, 3, 4, 5]
my_list[len(my_list):] = [6, 7, 8]
print(my_list)
Output:
[1, 2, 3, 4, 5, 6, 7, 8]
在这个例子中,my_list[len(my_list):]
是一个从列表末尾开始的空切片。
通过将此切片设置为[6, 7, 8]
,我们将这些项目附加到列表末尾,而不覆盖任何现有项目。
这本质上相当于使用list.extend()
方法或+=
运算符,但它展示了 Python 切片赋值的多功能性。
如何在中间插入项目?
您可以使用切片分配在列表中间插入项目,而无需删除任何现有元素。
操作方法如下:
my_list = [1, 2, 4, 5]
my_list[2:2] = [2.5, 3]
print(my_list)
Output:
[1, 2, 2.5, 3, 4, 5]
在这个例子中,my_list[2:2]
是我们要插入项目的位置的空切片。通过将此切片设置为[2.5, 3]
,我们在此位置插入这些项目,而不覆盖任何现有项目。
切片的开始和结束位于相同的索引,因此原始列表中的任何元素都不会被删除或替换。
如何删除项目?
通过将列表的一部分设置为空列表,您可以有效地删除这些项目。
它的工作原理如下:
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
my_list[2:5] = []
print(my_list)
Output:
[1, 2, 6, 7, 8, 9]
在此示例中,我们删除了从索引 2 到索引 5 的列表切片。通过将此切片设置为空列表,我们从列表中删除了这些项目。
请记住,此操作会修改原始列表。