[英]Python understanding slice notation question
我知道有很多切片符號問題,但我認為這應該有效,但它沒有。 假設我們有:
a = [1, 2, 3, 4]
假設我們要將子數組從索引 0 反轉為 1:
a = a[1:-1:-1] + a[2:]
我希望得到a=[2, 1, 3, 4]
但我得到的是a = [3, 4]
這是為什么? 為什么a[1:-1:-1]
不返回[2, 1]
? 我錯過了什么嗎?
當使用負步驟(例如list_[a, b, -n]
)進行切片時, a
將是開始的包含索引, b
將是 go 的索引,直到不包括它(因此是唯一的),同時采取步驟大小n
向左。 這就是切片與負步驟一起工作的方式。
嘗試這個:
a = [1, 2, 3, 4]
a = a[1::-1] + a[2:]
print(a)
# Out: [2, 1, 3, 4]
注意:如果您切片為a[1:0:-1]
,則由於切片規則,索引為零的元素不包括在內。 因此,您必須省略該索引來告訴 python 繼續包含元素,直到您用完元素。
如果這種切片讓你感到困惑,更簡單的方法是:
a = a[:2][::-1] + a[2:] # take normal slice first, then reverse it
編輯:您a[1:-1:-1]
邏輯有缺陷,因為 -1 是列表最后一個元素的索引(存在負索引)。 所以你不能使用數學並爭辯說 -1 比 0 小一,所以它應該可以工作。
這是您的代碼正在執行的操作:
你有一個列表a=[1,2,3,4]
現在,當您執行a[1:-1:-1]
時,它將返回一個[]
。 那是因為列表切片工作: [start index: end index: steps]
。 任何-1,-2
負運算符表示從后面開始的 go。 當您執行[1:-1:-1]
時,您是從較低的 position 和較高的 position 向后告訴 go。 這就是為什么它會給你一個[]
空列表。
你真正想要的是a[1::-1]
告訴 go 從索引 1 到列表末尾向后 - 即 1 然后 0
a[2:]
表示從索引 position 2 到結束的 go。
因此a[1::-1]+a[2:]
會給你[2,1,3,4]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.