Python中索引和切片的区别
在本文中,我们将解释Python中索引和切片之间的区别。
索引和切片仅适用于序列数据类型。序列类型中插入元素的顺序被保留,使我们可以通过索引和切片访问其元素。
总之,python的序列类型有list, tuple, string, range, byte和byte arrays。索引和切片适用于所有这些类型。
索引
“索引”一词是指基于可迭代对象内部的位置引用一个元素。
索引从0开始。序列中的第一个元素由索引0表示。
负索引从-1开始。序列中的最后一个元素由索引-1表示。
字符串中的每个字符都对应一个索引号,并且每个字符都可以通过其索引号访问。有两种方法可以访问字符串中的字符
- 使用正索引访问字符串字符
-
使用负索引访问字符串字符
T U T O T I A L S
正索引 0 1 2 3 4 5 6 7 8
负索引 -9 -8 -7 -6 -5 -4 -3 -2 -1
使用正索引访问字符串中的字符
在这种情况下,我们通过方括号传递正数索引(我们希望访问的索引)。 索引号序列从0开始。(代表字符串的第一个字符)。
例子
# 输入字符串
inputString = "Hello tutorialspoint python"
print("第0个索引字符:", inputString[0])
print("第7个索引字符", inputString[7])
print("第12个索引字符:", inputString[12])
('第0个索引字符:', 'H')
('第7个索引字符', 'u')
('第12个索引字符:', 'a')
输出
第0个索引字符: H
第7个索引字符 u
第12个索引字符: a
使用负索引访问字符串字符
在这种类型的索引中,我们通过方括号传递负索引(我们要访问的索引)。这种情况下,索引号从-1开始(表示字符串的最后一个字符)。
例子
# 输入字符串
inputString = "Hello tutorialspoint python"
print("最后一个索引字符:",[-1])
print("从后往前数第6个索引字符:", inputString[-6])
('最后一个索引字符:', 'n')
('从后往前数第6个索引字符:', 'p')
输出
最后一个索引字符: n
从后往前数第6个索引字符: p
列表中的索引
例子
# 输入列表
inputList =[1, 4, 8, 6, 2]
print("索引为2的元素:", inputList[2])
print("输入列表的最后一个元素:", inputList[-1])
('索引为2的元素:', 8)
('输入列表的最后一个元素:', 2)
输出
索引为2的元素: 8
输入列表的最后一个元素: 2
注意
当我们尝试使用不存在或太大的索引时,会抛出 IndexError
示例
# 输入列表
inputList =[1, 4, 8, 6, 2]
# 打印输入列表索引为10的元素
# 由于索引10不存在于输入列表中,会引发IndexError
print("索引为10的元素:", inputList[10])
Traceback (most recent call last):
File "main.py", line 5, in <module>
print("索引为10的元素:", inputList[10])
IndexError: list index out of range
输出
Traceback (most recent call last):
File "main.py", line 5, in <module>
print("索引为10的元素:", inputList[10])
IndexError: list index out of range
切片
术语“ 切片 ”是指基于它们的索引从可迭代对象中获取子集元素。
我们通过切片创建一个子字符串,它实际上是存在于另一个字符串中的字符串。当我们只需要字符串的一部分而不是整个字符串时,我们使用切片。
语法
string[start : end : step]
参数
start - 开始索引
end - 结束索引
step - 要在中进行的跳数/增量,即步长
字符串切片
# 输入字符串
inputString = "Hello tutorialspoint python"
print("字符串的前4个字符:", inputString[: 4])
print("从1索引到10索引(不包括)的每个字符:", inputString[1 : 10 : 2])
print("从1索引到10索引(不包括)的每个字符的逆序:", inputString[-1 : -10 : -2])
('字符串的前4个字符:', 'Hell')
('从1索引到10索引(不包括)的每个字符:', 'el uo')
('从1索引到10索引(不包括)的每个字符的逆序:', 'nhy n')
输出
字符串的前4个字符: Hell
从1索引到10索引(不包括)的每个字符: el uo
从1索引到10索引(不包括)的每个字符的逆序: nhy n
元组切片
我们可以使用元组切片。与使用字符串和列表的方式类似。元组切片用于获取各种物品。我们也使用切片操作符来执行元组切片。切片操作符可以用语法表示
语法
[start:stop:step]
示例
# 输入元组
givenTuple = ("Welcome", "this", "is", "TutorialsPoint", "Website", 10)
# 使用开始值和停止值(索引)切片
print('Tuple slicing from index 1 to index 6 :', givenTuple[1:6])
# 只使用停止值(索引)切片
print("Tuple slicing till index 7: ", givenTuple[:7])
# 只使用开始值(索引)切片
print("Tuple slicing from index 2 is:", givenTuple[2:])
# 不使用任何开始和停止值进行切片
print("Tuple slicing without any start and stop values:", givenTuple[:])
# 以相反的顺序进行切片
print("Tuple slicing in reverse order:", givenTuple[::-1])
('Tuple slicing from index 1 to index 6 :', ('this', 'is', 'TutorialsPoint', 'Website', 10))
('Tuple slicing till index 7: ', ('Welcome', 'this', 'is', 'TutorialsPoint', 'Website', 10))
('Tuple slicing from index 2 is:', ('is', 'TutorialsPoint', 'Website', 10))
('Tuple slicing without any start and stop values:', ('Welcome', 'this', 'is', 'TutorialsPoint', 'Website', 10))
('Tuple slicing in reverse order:', (10, 'Website', 'TutorialsPoint', 'is', 'this', 'Welcome'))
输出
Tuple slicing from index 1 to index 6 : ('this', 'is', 'TutorialsPoint', 'Website', 10)
Tuple slicing till index 7: ('Welcome', 'this', 'is', 'TutorialsPoint', 'Website', 10)
Tuple slicing from index 2 is: ('is', 'TutorialsPoint', 'Website', 10)
Tuple slicing without any start and stop values: ('Welcome', 'this', 'is', 'TutorialsPoint', 'Website', 10)
Tuple slicing in reverse order: (10, 'Website', 'TutorialsPoint', 'is', 'this', 'Welcome')
索引 vs 切片的区别
下表显示了Python中索引和切片的主要差异-
索引 | 切片 |
---|---|
它只返回1个项目 | 它返回一个新的list/tuple |
如果尝试使用太大的索引,则会抛出IndexError。 | 用于切片时,处理超出范围的索引。 |
我们不能通过项赋值在索引中更改列表的长度。 | 通过将项分配给切片,可以更改列表的长度甚至将其清除。 |
我们可以将单个元素或可迭代项分配给索引。 | 当我们将单个元素分配给切片时,会出现TypeError。它只接受可迭代项。 |
结论
通过示例,我们学习了Python中索引和切片之间的区别。