我需要在Python的切片表示法上有一个很好的解释(引用是一个加号).
对我来说,这种符号需要一点点提升.
它看起来非常强大,但我还没有完全了解它.
切片索引具有有用的默认值; 省略的第一个索引默认为零,省略的第二个索引默认为要切片的字符串的大小.
>>> a = "hello"
>>> print(a[::-1])
olleh
Run Code Online (Sandbox Code Playgroud)
正如教程所说a[::-1]应该等于a[0:5:-1]
但是a[0:5:-1]如下所示是空的:
>>> print(len(a[0:5:-1]))
0
Run Code Online (Sandbox Code Playgroud)
问题不是解释切片符号的重复.那个问题是关于python中切片的一般用法.
python中的扩展切片语法已经向我解释为" a[n:m:k] returns every kth element from n to m".
这让我很清楚当k为正时会发生什么.但是我对如何解释a[n:m:k]负面k 感到迷茫.我知道这会a[::-1]颠倒一个,并且这a[::-k]需要反转a的第k个元素.
但这是对k正定义的概括呢?我想知道a[n:m:k]实际上是如何定义的,所以(例如)我可以理解为什么:
"abcd"[-1:0:-1] = "dcb"
Run Code Online (Sandbox Code Playgroud)
是否正在a[n:m:-k]逆转序列a,然后从m开始,在m之前从一个原始索引开始,然后结束一个?我不这么认为,因为这种模式不适合我尝试过的其他n和m值.但我无法弄清楚这是如何实际定义的,搜索让我无处可去.
我一直在阅读scumpy.org上的numpy i:j:k切片教程.在第二个例子后,它说
假设n是要切片的维度中的元素数.然后,如果我没有给出其默认值为0 K> 0和N - 1为ķ<0 .如果没有给出j,则对于k> 0,默认为n ; 对于k <0,默认为-1.如果没有给出k,则默认为1.
然而:
>>> import numpy as np
>>> x = np.array([0,1,2,3,4])
>>> x[::-1]
array([4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)
如果j默认为-1,那么x[:-1:-1]应该相当于x[::-1],但是
>>> x[:-1:-1]
array([], dtype=int64)
>>> x[:-(len(x)+1):-1]
array([4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)
而
>>> x[:-(len(x)+1):-1]
array([4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)
因此当 …