Python 中的 [:] 或切片是什么?

数组和字符串是Python中最常用的数据结构。它们非常强大,并且是一般编程的基础。数组切片或字符串切片有助于增强数组和字符串的功能。如果我们知道如何以及何时使用它们,它们会非常有用。但乍一看感觉有点复杂。因此,在本文中,我们将尝试了解字符串/列表切片,或者具体来说,Python 中的 [:] 是什么。

什么是数组或字符串?

数组是一系列连续且具有传染性的数据,其中每个元素具有相似的数据类型。Python 有一个数组的后继者,称为列表。列表与数组类似,只是列表可以包含不同数据类型的数据。

字符串只是一个字符数组。就像列表一样,Python 对字符串也有强大的功能。在编程中很多时候你需要获取字符串或数组的子字符串或子数组。对于这种情况,Python 为我们提供了切片功能。

相关:了解有关Python 中数组字符串的更多信息。

什么是切片?

切片是从较大的字符串或数组中选择字符串或数组的切片的过程。例如,我们有字符串“I loveprogramming”,这里“programming”是字符串“Iloveprogramming”的一部分。切片也可以类似地作用于列表。例如,我们有一个列表 [10,20,30,40,50]。[10,20,30] 是列表 [10,20,30,40,50] 的一部分。

如何在Python中进行切片?

切片是列表/字符串操作的重要组成部分。与其他语言不同,Python 通过内置的切片方法使切片变得容易。让我们通过一个简单的例子来理解切片:-

Python中切片的实现

1
2
3
4
5
6
my_list = [1,2,3,4,5] # list of numbers from 1 to 5
print(my_list) # printing the entire list
print(my_list[0:5]) #slicing the list from first element to last
print(my_list[1:]) #slicing the list from 2nd element to the last element
print(my_list[:4]) #slicing the list from first element to the 4th element
print(my_list[1:4]) # slicing the list from the 2nd element to the 4th element
Python 中切片的代码和输出

在上面的代码块中,在 my_list 中定义了一个数字列表。首先,我们使用 print(my_list) 打印列表。然后,我们开始对列表进行切片。首先,我们对整个列表进行切片,即输出将是整个列表本身。也就是说,在代码 print(my_list[0:5]) 中,我们从 0 开始,即列表中的第一个数字“1”,然后打印列表中 1 之后的所有内容,即“2”, 3,4′ 以及列表的第五个元素“5”。因此,整个列表都进入切片的权限范围内。

切片的语法是:

list_name[starting_index:ending_index:step]

在上面的切片语法中,list_name 指的是我们要执行切片的列表的名称,starting_index 指的是我们必须从中切片列表的列表的索引,ending_index 指的是直到的索引我们必须对我们的清单进行切片。步骤是我们在选择下一个元素之前要跳过的元素数量。

要仅选择偶数索引元素,我们可以将starting_index设置为0,ending_index为列表长度,步长为2。要仅选择奇数索引元素,我们可以将starting_index设置为0,ending_index为列表长度,并将step设置为2。步骤为 2。将步骤设置为 3,它将打印列表中的每个第三个元素。

默认情况下,起始索引设置为 0,结束索引设置为列表的长度,步长设置为 1。我们可以选择将起始索引、结束索引和步长的位置保留为空白。如果我们不传递参数,解释器将采用默认值(将starting_index、ending_index和step的位置留空)。因此,当我们不传递starting_index时,解释器会假定starting_index为0并从头开始打印列表。类似地,当我们不传递ending_index 时,它会打印列表直到最后。默认情况下,在步数计数的情况下,它会打印每个下一个元素(step=1)。

我希望这可以帮助您彻底理解什么是切片。您可以参考下面的链接来了解有关切片的更多信息。

相关:了解有关Python 中切片的更多信息。

现在,我们可以转向我们的主要问题了。

[:] 到底是什么?

现在我们已经理解了切片,我们将尝试理解 [:] 的含义。[:] 只是一个没有传递任何参数的切片查询。

例子: my_list[:]

这意味着起始索引是 0,结束索引是列表的长度(在上面的示例中 [:] 相当于 [0:5] )。因此,整个列表被切片。当解释器遇到切片查询时,它将开始打印从列表开头到列表结尾的元素,然后停止,如默认参数中所述。

简而言之,我们可以说这只是打印列表的另一种方式。输出 print(my_list[:]) 与 print(my_list) 类似。他们之间完全没有区别。我们可以将查询读取为打印列表的切片,从第 0 个索引开始到第 len(my_list) 个索引,步长为 1。

这可以在列表、数组、字符串甚至元组上完成。切片方法对所有这些数据结构的工作原理类似。因此,如果我们用 [:] 对字符串进行切片,它将简单地打印整个字符串。

在字符串上使用 [:]

1
2
string = "This is a string"
print(string[:])
Python 中字符串切片的代码和输出

在上面的代码中,我们对字符串进行了切片。字符串切片的工作方式与列表切片相同。当我们打印 string[:] 时,与列表类似,它会打印从头到尾的整个字符串,默认参数为starting_index = 0,ending_index = string length,步长为1。因此,上面的代码产生输出,“这是一个字符串”。

字符串在编程中非常重要,并且由于它们是不可变的而很难处理。字符串切片提供了使字符串处理变得非常容易的功能。

结论

基本上,[:] 是一种切片方法,在列表或字符串上执行以分别打印整个列表或字符串而不是切片。这只是打印带有一些额外和不必要的字符的列表或字符串的另一种方法。我们没有用它,因为如果我们想要整个列表作为输出,我们可以简单地打印列表本身。但是,我们今天了解到这样的事情是存在的。

参考

堆栈溢出对同一问题的回答。

关于切片的官方 Python 文档