gpt4 book ai didi

python - 反转字符串时的 Slice vs Stride

转载 作者:太空狗 更新时间:2023-10-30 02:33:59 24 4
gpt4 key购买 nike

通常要反转列表应该执行以下操作:

>>>>l = [1, 2, 3, 4, 5]
>>>>l[::-1]
[5, 4, 3, 2, 1]

但不是这样的确切语法:

list[<start>:<end>:<stop>]

如果我不提供可选参数,默认值如下(如果我错了请纠正我:

<start> = 0(Beginning of list)
<end> = 5(Length of list)
<step> = 1

因此,如果我提供可选参数,它实际上应该产生相同的结果:

>>>>l[0:5:-1]
>>>>[]

但我得到的是一个空列表(我知道为什么会这样),但是在第一种情况下 python 采用的默认值是什么?它应该采用 0 和 5 作为默认值并且不产生任何结果,或者 [::-1] 不同于 list[start:end:stop]

最佳答案

l[::-1] 等同于 l[slice(None,None,-1)],其中 slice([start], stop[, step])返回 slice目的。请考虑以下事项:

>>> slice(None,None,-1).indices(5)
(4, -1, -1)
>>> slice(None,None,1).indices(5)
(0, 5, 1)

这正是您在使用扩展索引语法访问列表时看到的行为,即 l[start:stop:step]

>>> l[::-1]
[5, 4, 3, 2, 1]
>>> l[slice(None,None,-1)]
[5, 4, 3, 2, 1]

... but what are the default values being taken by python in the 1st case?

开始/停止的值(如果未提供)基于索引数(列表长度)以及step 的值。具体参见 CPython source for the slice object (Objects/sliceobject.c)

if (r->start == Py_None) {
*start = *step < 0 ? length-1 : 0;
} else {
/* .... */
}

if (r->stop == Py_None) {
*stop = *step < 0 ? -1 : length;
} else {
/* .... */
}

关于python - 反转字符串时的 Slice vs Stride,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10788311/

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