[英]Why is .loc slicing in pandas inclusive of stop, contrary to typical python slicing?
[英]Why does slicing in python stop at -1?
"abcde"[0:5:1]
给出 abcde。 所以我希望"abcde"[4:-1:-1]
返回 edcba 但它什么也没给出。 有没有办法在显式给出中间参数的同时获得与"abcde"[4::-1]
相同的结果?
0 | 1 | 2 | 3 | 4个
一个 | 乙 | c | d | 电子
=============
[4:-1:-1]
4 -> e
-1 -> e
-1 -> step back
=============
=> 索引 4 之间没有任何内容 -> -1 退后一步
Python 切片中的-1
表示:第 4rth(最后一个)。 4:-1
表示4:4
-> 空字符串。
"abcde"[4::-1] # this gives "edcba"
"abcde"[4:-(len("abcde")+1):-1] # this too
您正在从最后一个索引 (4) 切片到索引 4,这导致一个空字符串。 换句话说,Python 正在执行以下操作:
"abcde"[4:4:-1]
# which is equal to
"abcde"[4:4]
# and evaluates to
""
如果以 -1 的步幅从最后一个索引 (4) 切片到第一个索引 (0),则可以反转它。 因此,以下代码将起作用:
"abcde"[-1:0:-1]
在实际实践中可以缩写为:
"abcde"[::-1]
如果您需要使用一个数字作为停止点position,例如,您正在使用一个变量来表示停止点索引,那么您可以使用等于-len(obj) - 1
的负值,其中obj
是您想要的 object在第一个字符之前反转为 position:
>>> 'abcde'[4:-6:-1]
'edcba'
要么,
>>> 'abcde'[-1:-6:-1]
'edcba'
Python 列表语法为:
列表[开始:停止:步骤]
在第一个示例中:start=0,stop=5,step=1。 这相当于 C 样式的 for 循环:
对于(i=0;i<5;i++)
在你的第二个例子中,start=4,stop=-1=4,step=-1。 这相当于 C 样式的 for 循环:
对于 (i=4; i>4; i--)
由于开始条件和停止条件相同,因此您的结果为空。
由于 -1 是一个负数,作为开始/停止是 python 列表切片中的一个特例,意思是“len(list)-1”,你实际上不能做你想要的操作:
对于 (i=4; i>-1; i--)
所以你最好的选择是 "abcde"[::-1] ,它会从方向正确地推断出结束和开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.