【问题标题】:What does extended slice syntax actually do for negative steps? [duplicate]扩展切片语法实际上对负步骤有什么作用? [复制]
【发布时间】:2013-01-09 03:20:23
【问题描述】:

python 中的扩展切片语法已向我解释为“a[n:m:k] returns every kth element from n to m”。

这让我很好地了解了当 k 为正时会发生什么。但是我不知道如何将a[n:m:k] 解释为负k。我知道a[::-1] 反转a,并且a[::-k] 需要反转a 的第k 个元素。

但是,这如何概括 k 正数的定义?我想知道a[n:m:k] 是如何实际定义的,以便(例如)我能理解为什么:

"abcd"[-1:0:-1] = "dcb"

a[n:m:-k] 是否将序列 a 颠倒过来,然后将具有原始索引的元素从 n 开始并在 m 之前结束一个或什么?我不这么认为,因为这种模式不适合我尝试过的其他 n 和 m 值。但我不知道这是如何定义的,而且搜索让我一无所获。

【问题讨论】:

标签: python list slice syntactic-sugar


【解决方案1】:

[-1:0:-1] 表示:从索引len(string)-1 开始向上移动到0(不包括)并走-1(反向)的一步。

因此,获取了以下索引:

le-1, le-1-1, le-1-1-1  .... 1  # le is len(string)

示例:

In [24]: strs = 'foobar'

In [25]: le = len(strs)

In [26]: strs[-1:0:-1]  # the first -1 is equivalent to len(strs)-1

Out[26]: 'raboo'

In [27]: strs[le-1:0:-1]   
Out[27]: 'raboo'

【讨论】:

  • 谢谢,这个解释对我来说很清楚。我错过了递归步进以及端点不包含在内的事实。
  • 是的,步骤创建序列的这一点使这种解释“易于理解”,即 str[-2:-6:-1] 将导致选择以下索引 -2, -2-1= -3,-2-1-1=-4,一直到-6(排除)。用字符串引发:>>> print ("07654321"[-2:-6:-1]) 2345
  • 对于strs[i:j:-1] 中的ij,您将明确使用什么值来反转像strs[::-1] 这样的字符串?
  • @AsadMoosvi i 可以是Nonelen(strs)j 可以是None
  • 非常感谢。 strs[-2:-6] = 'ooba' 和 strs[-2:-6:-1] = 'aboo'
【解决方案2】:

Python 文档(here's the technical onerange() 的解释更容易理解)比简化的“每 k 个元素”解释更正确。切片参数命名恰当

slice[start:stop:step]

因此,切片从start 定义的位置开始,在到达stop 位置之前停止,并从一个位置移动到下一个位置step 项。

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 2019-03-07
    • 2019-11-04
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2017-06-06
    • 2019-01-12
    相关资源
    最近更新 更多