gpt4 book ai didi

Python 列表错误:[::-1] 踩 [:-1] 切片

转载 作者:IT老高 更新时间:2023-10-28 21:08:15 26 4
gpt4 key购买 nike

我以为我了解了python中列表切片的基础知识,但是在切片上使用负步骤时收到了意外错误,如下所示:

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:-1:-1]
[]

(请注意,这是在 Python 3.5 中运行的)

为什么 a[:-1:-1] 不以与使用 a[::-1] 遍历整个列表相同的方式反向遍历 a[:-1] 切片?

我意识到您也可以使用 list.reverse(),但要更好地理解底层的 Python 切片功能。

最佳答案

a[:-1:-1] 中的第一个-1 并不代表你认为的那样。

在切片中,负的开始/结束索引不会按字面意思解释。相反,它们用于方便地引用列表的末尾(即它们与 len(a) 相关)。这与切片的方向无关。

这意味着

a[:-1:-1]

等价于

a[:len(a)-1:-1]

在反向切片过程中省略时,起始索引默认为len(a)-1,使得上面等价于

a[len(a)-1:len(a)-1:-1]

这总是给出一个空列表,因为开始和结束索引是相同的,而结束索引是互斥的。

要反向切片直到第零个元素(包括第零个元素),您可以使用以下任何一种表示法:

>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:None:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:-len(a)-1:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

关于Python 列表错误:[::-1] 踩 [:-1] 切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41430791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com