What does extended slice syntax actually do for negative steps?
python中的扩展片语法被解释为"a[n:m:k] returns every kth element from n to m"。
这给了我一个很好的主意,当k为正数时,会发生什么。但是,我对如何解释负k的a[n:m:k]迷路了,我知道a[::-1]反转a,a[::-k]取反a的kth元素。
但这是如何推广k正的定义呢?我想知道a[n:m:k]是如何定义的,以便(例如)我能理解为什么:
a[n:m:-k]是否颠倒了序列a,然后从n开始,到m之前结束的元素取原始索引?我不这么认为,因为这个模式不适合我尝试过的N和M的其他值。但我不知道这到底是怎么定义的,搜索并没有给我任何帮助。
- 相关问题:stackoverflow.com/questions/12521798/…
- 这个问题不是"解释python的切片符号"的副本。这一个询问关于负步骤的细节,而后者是一般性的切片。
[-1:0:-1]是指:从指数len(string)-1开始,向上移动到0(不包括在内),再向上移动一步-1(反向)。
因此,将获取以下索引:
1
| le-1, le-1-1, le-1-1-1 .... 1 # le is len(string) |
例子:
1 2 3 4 5 6 7 8 9 10
| 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(不包括)。用字符串引出:>>>打印("07654321"[-2:-6:-1])2345
- 您在strs[i:j:-1]中明确使用i和j来反转像strs[::-1]这样的字符串的值是多少?
- @asadmoosvi i可以是None或len(strs)和j可以是None。
- 非常好,谢谢。wuld strs[-2:-6]='ooba'和strs[-2:-6:-1]='aboo'
python文档(这里是技术文档;对range()的解释比简化的"every kth元素"解释更为正确。切片参数的名称恰当
因此,切片从start定义的位置开始,在到达位置stop之前停止,并通过step项从一个位置移动到下一个位置。