簡體   English   中英

Python 理解切片符號題

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

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