首页 文章

扩展切片语法实际上对负步骤有什么作用? [重复]

提问于
浏览
16

这个问题在这里已有答案:

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值是什么,以便弄清楚这是如何实际定义的,并且搜索让我无处可去 .

2 回答

  • 8

    [-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'
    
  • 13

    Python文档(here's the technical one; range()的解释有点容易理解)比简化的"every kth element"解释更正确 . 切片参数恰当地命名

    slice[start:stop:step]
    

    所以切片从 start 定义的位置开始,在到达位置 stop 之前停止,并通过 step 项从一个位置移动到下一个位置 .

相关问题