簡體   English   中英

為什么 python 中的切片會停在 -1 處?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM