以负步幅转到序列开头的扩展切片

发布于 2021-01-29 17:18:42

当我解释我的问题时,请耐心等待。如果您已经了解扩展的切片列表索引,请跳至粗体标题。

在python中,您可以使用切片符号为列表编制索引。这是一个例子:

>>> A = list(range(10))
>>> A[0:5]
[0, 1, 2, 3, 4]

您还可以包括一个跨步,其作用类似于一个“步骤”:

>>> A[0:5:2]
[0, 2, 4]

跨度也可以是负数,这意味着将以相反的顺序检索元素:

>>> A[5:0:-1]
[5, 4, 3, 2, 1]

可是等等!我想看看[4, 3, 2, 1, 0]。哦,我知道了,我需要减少开始索引和结束索引:

>>> A[4:-1:-1]
[]

发生了什么?它将-1解释为位于数组的末尾,而不是开头。我知道您可以达到以下目的:

>>> A[4::-1]
[4, 3, 2, 1, 0]

但是您不能在所有情况下都使用它。例如,在已传递索引的方法中。

我的问题是:

有没有什么好方法可以使用带有负步幅的扩展切片 以及 包含序列第一个元素的 显式起始索引和终止索引

到目前为止,这是我想出的,但似乎并不令人满意。

>>> A[0:5][::-1]
[4, 3, 2, 1, 0]
关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    好的,我认为这可能和我将要得到的一样好。感谢Abgan提出了这个想法。这依赖于以下事实:将片中的None视为缺少的参数。有人有更好的东西吗?

    def getReversedList(aList, end, start, step):
        return aList[end:start if start!=-1 else None:step]
    

    编辑:检查start==-1,而不是0

    这仍然不是理想的,因为您正在破坏-1的通常行为。似乎这里的问题是应该发生的事情的两个重叠定义。无论谁赢了,都会夺走寻找其他意图的有效调用。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看