![](/img/trans.png)
[英]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.