|
哈喽大家好,我是咸鱼
今天来讲一个我在实现 python 列表切片时遇到的趣事
在正式开始之前,我们先来了解一下切片(slice)
切片操作是访问序列(列表、字符串......)中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列
语法如下
- start 是切片的起始索引值,当 start 是序列首位时可以省略
- end 是切片结束索引值,当 end 是序列末位时可以省略
- step 为步长,可以不提供,默认是1,不能为0,为负数时表示列表翻转
需要注意的是,切片操作遵循包头不包尾的原则,即从序列的第 start 位索引起,向右取到后 end-1 位元素为止,按 m 间隔过滤
下面举一些关于切片的例子- # 获取列表的前 n 个元素:
- lst = [1, 2, 3, 4, 5, 6]
- n = 3
- result = lst[:n]
- print(result) # [1, 2, 3]
- # 获取列表的后 n 个元素:
- lst = [1, 2, 3, 4, 5, 6]
- n = 3
- result = lst[-n:]
- print(result) # [4, 5, 6]
- # 获取列表中的偶数元素:
- lst = [1, 2, 3, 4, 5, 6]
- result = lst[1::2]
- print(result) # [2, 4, 6]
- # 获取列表中的奇数元素:
- lst = [1, 2, 3, 4, 5, 6]
- result = lst[::2]
- print(result) # [1, 3, 5]
- # 获取列表中的倒数第二个元素:
- lst = [1, 2, 3, 4, 5, 6]
- result = lst[-2:-1]
- print(result) # [5]
- # 获取列表中的最后两个元素:
- lst = [1, 2, 3, 4, 5, 6]
- result = lst[-2:]
- print(result) # [5, 6]
复制代码 根据 GPT 的回答,Fortran 是最早支持切片语法的语言,历史上曾经有多种语言支持切片操作
上面这些语言虽然说都支持切片语法,但我觉得不够 python 那样的灵活简洁
Python 的切片语法非常简洁和直观,使用起来非常方便。通过使用冒号(:)来指定起始位置、结束位置和步长,可以轻松地进行切片操作。
Python 的切片语法不仅支持基本的切片操作,还可以使用负数索引和省略号(...)来处理更复杂的情况。这使得对列表、字符串、元组等序列类型的数据进行灵活的切片成为可能
再介绍完了切片之后,我们来进入正题,那天咸鱼在写一个关于列表切片操作的文档
现象
我们知道:根据单个索引进行取值时,如果索引越界,就会报错- list1 = [1,2,3]
- print(list1[5])
- """
- 报错信息如下:
- Traceback (most recent call last):
- File "E:\PycharmProjects\projects\demo\草稿纸.py", line 2, in <module>
- print(list1[5])
- IndexError: list index out of range
- """
复制代码 但是当咸鱼不小心将切片结束索引值设置成了超过了列表长度的值的时候,发现居然没有报错- list1 = [1,2,3]
- print(list1[1:5]) # 结果[2, 3]
复制代码 是不是很有趣,Python 中的切片操作不会引发索引越界的错误
关于这个现象,官方文档里面是有介绍的
<blockquote>
The slice of s from i to j is defined as the sequence of items with index k such that i |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|