Python列表的索引与切片
时间:2023-03-11 10:59:59|栏目: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) 列表通过 index() 函数,传入一个元素来获取当前元素的索引值
- list[index] = new_item ; list[index]为变量对应的索引的值; new_item 为一个新的元素
- 数据修改的范围只能是已存在的索引范围内
- 列表无法通过添加新的索引的方式赋值
示例如下:
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() 函数的功能:通过索引删除并获取列表的元素
pop() 函数的用法: list.pop(index) , index 为删除列表的第几个元素
- 函数会删除该索引的元素并返回
- 如果传入的 index 索引不存在,则会报错
示例如下:
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 函数的用法: del list(index) , index 为删除列表的第几个元素
- 直接删除,无返回值
- 如果传入的 index 索引不存在,则会报错
示例如下:
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 和列表的用法完全一致
- 无法通过索引修改、删除元素(因为元组是不可修改的)