Python列表索引与切片详解:从基础到高级操作

Leo
Leo
发布时间:2026-10-16 | 5人浏览过
原创

本文深入解析Python中列表、字符串和元组的索引与切片机制。详细讲解索引从0开始的规则、切片左含右不含的特性,以及如何通过index()查找元素。重点对比pop()与del()在删除元素时的返回值差异及边界报错处理,并探讨元组索引的特殊性,帮助开发者掌握高效的数据访问技巧。

索引是访问序列中特定元素的关键方式。

  • 在Python中,具备索引概念的数据类型主要包括字符串、列表以及元组。
  • 索引计数从序列的最左侧开始计算。
  • 索引值以数字表示,且起始索引固定为 0。
  • 对于字符串、列表和元组,其最大有效索引值等于序列长度减 1。

具体访问示例如下:

names = ['Neo', 'Jack', 'Adem']
print(names[0])            # >>> Neo
print(names[-1])        # >>> Adem
print(names[5])            # IndexError: list index out of range    没有索引为5的元素,所以报错

切片是用于获取序列中一段连续元素的操作。

  • 与索引仅访问单个元素不同,切片允许访问指定范围内的多个元素。
  • 在方括号内使用冒号分隔两个索引位置,即可提取该范围内的元素,例如语法 [0:10]。
  • 切片遵循“左含右不含”原则,即包含起始索引对应的元素,但不包含结束索引对应的元素。
  • 即使切片提取了原列表的全部元素,生成的新对象在内存中也是一个全新的列表,与原列表并非同一对象。

切片基础示例如下:

num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(num_list[3:7])

运行上述代码的输出结果为:

>>> [4, 5, 6, 7]

若要获取列表的完整内容,可使用以下切片方式:

names = ['Neo', 'Jack', 'Adem']
print('names 列表完整的内容是:', names[:])
print('names 列表完整的内容是:', names[0:])

对应执行结果如下:

>>> names 列表完整的内容是: ['Neo', 'Jack', 'Adem'] >>> names 列表完整的内容是: ['Neo', 'Jack', 'Adem']

再次强调,通过切片获得的完整列表是一个新对象,即使内容完全一致,其身份标识也与原列表不同。

相关完整内容获取示例如下:

names = ['Neo', 'Jack', 'Adem', 'Lily']
print('\'names\' 列表的内存地址为:', id(names))
print('索引获取的完整\'names\' 列表的内存地址为:', id(names[0:]))

# 执行结果如下:
# >>> 'names' 列表的内存地址为: 140522949689152
# >>> 索引获取的完整'names' 列表的内存地址为: 140522949686656 

利用切片特性可以实现列表的反序获取,具体示例如下:

num_list = [1, 2, 3, 4, 5, 6, 7, 8]
print(num_list[::-1])       # 列表的反序
print(num_list[-3:-1])      # 列表的反向获取
print(num_list[0:8:2])      # 列表的步长获取:【每隔2步长(也可以理解为每两个数值)获取索引0到8的元素】

# 执行结果如下:
# >>> [8, 7, 6, 5, 4, 3, 2, 1]
# >>> [6, 7]
# >>> [1, 3, 5, 7]

当切片范围无效或为空时,将生成空列表,示例如下:

num_list = [1, 2, 3, 4, 5, 6, 7, 8]
print(num_list[0:0]) 

# 执行结果如下:
# >>> []

列表索引的高级应用涉及元素的获取与修改。

  • 利用 list.index(item) 方法,传入目标元素即可返回该元素首次出现的索引值。
  • 通过 list[index] = new_item 语法,可以将指定索引位置的值替换为 new_item,其中 list[index] 代表待修改的位置变量。
  • 执行赋值操作时,目标索引必须存在于当前列表的有效范围内。
  • 列表不支持通过直接添加不存在的索引来进行赋值,否则将引发错误。

索引修改与越界错误示例如下:

test_str = ['a', 'b', 'c', 'd']
print(test_str.index('c'))

# 执行结果如下:
# >>> 2            'c' 的索引位置是 2


test_str = ['a', 'b', 'c', 'd']
print(test_str.index('e'))

# 执行结果如下:
# >>> ValueError: 'e' is not in list
test_str = ['a', 'b', 'c', 'd']
test_str[0]='z'
print(test_str)

# 执行结果如下:
# >>> ['z', 'b', 'c', 'd']


test_str = ['a', 'b', 'c', 'd']
test_str[:]='h', 'j', 'k', 'l'
print(test_str)

# 执行结果如下:
# >>> ['h', 'j', 'k', 'l']


test_str = ['a', 'b', 'c', 'd']
test_str[:]=['o', 'p', 'q', 'r']
print(test_str)

# 执行结果如下:
# >>> ['o', 'p', 'q', 'r']
test_str = ['a', 'b', 'c', 'd']
test_str[5]='z'
print(test_str)

# 执行结果如下:
# >>> IndexError: list assignment index out of range

使用 pop() 函数可以从列表中删除指定索引的元素。

pop() 的核心功能是依据索引删除元素,同时返回被删除的元素值。

调用语法为 list.pop(index),其中 index 指定要删除的元素位置。

  • 该函数执行后会移除对应索引处的元素,并返回该元素的值。
  • 若提供的 index 超出列表范围,程序将抛出异常。

pop() 函数使用示例如下:

names = ['Neo', 'Jack', 'Adem', 'Lily']
pop_item = names.pop(1)
print('删除的元素为:', pop_item, ', 被删除后的\'names\'列表为:', names)

# 执行结果如下:
# >>> 删除的元素为: Jack , 被删除后的'names'列表为: ['Neo', 'Adem', 'Lily']


names = ['Neo', 'Jack', 'Adem', 'Lily']
pop_item = names.pop(5)
print(names)

# 执行结果如下:
# >>> IndexError: pop index out of range

另一种删除索引元素的方法是使用 del 语句。

del 的功能同样是依据索引删除列表中的元素。

调用语法为 del list[index],其中 index 指定要删除的元素位置。

  • 与 pop() 不同,del 执行直接删除操作,不返回任何值。
  • 若提供的 index 超出列表范围,程序将抛出异常。

del 语句使用示例如下:

names = ['Neo', 'Jack', 'Adem', 'Lily']
del names[0]
print(names)

# 执行结果如下:
# >>> ['Jack', 'Adem', 'Lily']


names = ['Neo', 'Jack', 'Adem', 'Lily']
del names[0]
print(names)

# 执行结果如下:
# >>> IndexError: list assignment index out of range

元组在索引操作上具有特殊性。

  • 元组支持与列表相同的索引获取及切片操作。
  • 元组的 index 方法用法与列表完全一致,用于查找元素索引。
  • 由于元组是不可变序列,因此无法通过索引对元素进行修改或删除。

以上就是关于Python列表索引与切片的详细介绍,更多相关Python 索引与切片内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表