Python小白之list切片学习笔记
1. 常规操作
可迭代对像之切片操作(可以理解为类似于range()的操作),list作为可迭代数据之一,自然也可以进行切片操作。
语法格式为:
slice_list = [start_index:stop_index:step_index]
其中,stop_index为开区间,即不包含该索引(不知道为啥,反正是python的规则)
- step_index可省略,默认值为1,此时可简写为:
slice_list = [start_index:stop_index]
注意:此处冒号(:)也同时被省略(也可以不省略!)
- step_index可省略,默认值为1,且从起始索引开始将list切分为两部分,取后半部分,则stop_index也可以省略,此时可简写为:
slice_list = [start_index:]
注意:此处冒号(:)没有被省略(不能省略,否则就是单个元素索引了!)
- step_index可省略,默认值为1,且从截止索引开始将list切分为两部分,取后前部分,则start_index也可以省略,此时可简写为:
slice_list = [:stop_index]
注意:此处冒号(:)没有被省略(不能省略,否则就是单个元素索引了!)
示例代码:
# list切片操作
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list_[0:5]) # list_[0:5] 就等价于 list_[0:5:1] 后面的:1可以省略不写
print(list_[0:5:2])
# 从起始索引开始向后取写法
print(list_[5:])
# 从截止索引开始向前取写法
print(list_[:5])
print(list_[5:1]) # 结果为空,list_[5:1] 等价与list_[5:1:1] 类似于range(),切片结果啥也没有
# 此时可以这么写
print(list_[5:1:-1])
输出结果:
list_[0:5]:[0, 1, 2, 3, 4]
list_[0:5:2]:[0, 2, 4]
list_[5:]:[5, 6, 7, 8, 9, 10]
list_[:5]:[0, 1, 2, 3, 4]
list_[5:1]:[]
list_[5:1:-1]:[5, 4, 3, 2]
2. 负数切皮操作
顾名思义,索引index值可以为负数,负数索引表示倒数第几个(从-1开始),-1表示倒数第1个元素,也是最后一个元素,语法格式同1.
示例代码:
# list负数切片操作(装13操作)
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list_[-1]) # 倒数第一个(最后一个)
print(list_[-5:]) # 倒数第5个及之后的数据(-5、-4...)
print(list_[:-5]) # 倒数第6个及之前的数据(-6、-7、-8...)
print(list_[-1:-5]) # 步进值默认为1,所以输出为空列表:[]
# 可改为:
print(list_[-1:-5:-1])
输出结果:
list_[-1]:10
list_[-5:]:[6, 7, 8, 9, 10]
list_[:-5]:[0, 1, 2, 3, 4, 5]
list_[-1:-5]:[]
list_[-1:-5:-1]:[10, 9, 8, 7]
3.知识拓展与思考:切片是否可以用于赋值操作?
经过试验,是可以的。
直接上示例:
# list切片赋值操作
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_[0:2] = [6, 6]
print(list_)
# 如果长度不一样呢
list_[0:2] = [6]
print(list_)
list_[0:2] = [6, 6, 6]
print(list_)
输出结果:
[6, 6, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果切片长度和赋值长度不一样呢???会有什么效果???
# 如果长度不一样呢
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_[0:2] = [6] # 效果:1号元素被删除
print(list_)
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_[0:2] = [6, 6, 6] # 效果:在1后面插入一个元素6
print(list_)
输出结果:
[6, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[6, 6, 6, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4.知识小结
对于小白来说,主要要掌握第1节的内容,也是python里面list切片的基本用法,第2节的内容理解即可,主要还是基于第1节的内容进行补充;第3节为个人突发奇想点,仅作为探索使用,一般不建议使用(不直观且容易引入Bug)。