我想顛倒python中的列表切片,但它返回一個空列表。但是當我嘗試整個列表時,它工作正常。我在這裏錯過了什麼嗎?顛倒Python中的列表切片
l=[1,2,3,4,5,6,7,8]
l[::-1]=[8, 7, 6, 5, 4, 3, 2, 1] <<< This worked fine.
l[2:5]=[3, 4, 5]
l[2:5:-1]=[] <<< Expecting [5,4,3] here.
任何線索?
我想顛倒python中的列表切片,但它返回一個空列表。但是當我嘗試整個列表時,它工作正常。我在這裏錯過了什麼嗎?顛倒Python中的列表切片
l=[1,2,3,4,5,6,7,8]
l[::-1]=[8, 7, 6, 5, 4, 3, 2, 1] <<< This worked fine.
l[2:5]=[3, 4, 5]
l[2:5:-1]=[] <<< Expecting [5,4,3] here.
任何線索?
語法總是[start:end:step]
所以如果你倒退,你的開始需要比結束更大。另外請記住,它包括開始和排除結束,所以你需要在開始和結束交換後減去1。
l[5:2:-1]= [6, 5, 4]
l[4:1:-1]= [5, 4, 3]
切片符號是[start:stop:step]
。這意味着「從start
開始,然後增加step
,直到你到達end
。」它類似於此構造:
counter = 0
stop = 10
step = 1
while counter < stop:
print(counter)
counter += step
這將產生,符合市場預期,0
通過9
。
現在想象一下,如果我們與您正在使用的值試了一下:
counter = 2
stop = 5
step = -1
while counter < stop:
print(counter)
counter += step
如果我們實際執行這一點,將打印2
,再加入-1
到拿到1
,然後打印1
並添加-1
以得到0
,那麼它永遠是-1
,-2
等等。您將不得不手動停止執行以停止無限循環。
如果你離開start
或stop
空,如[:4]
或[::-1]
,這表明該序列的開頭或結尾,由step
確定。 Python將以正step
前進,並向後以負step
(試圖使用的step
產生錯誤)。
>>> l[2::]
[3, 4, 5, 6, 7, 8]
>>> l[2::-1]
[3, 2, 1]
>>> l[:2:]
[1, 2]
>>> l[:2:-1]
[8, 7, 6, 5, 4]
如果指定了start
,end
和step
可能無法正常工作(空step
默認爲1
),Python會簡單地返回一個空序列。
'l [2:5] [:: - 1]'在不同的方括號內進行操作。 –
你需要'l [4:1:-1]'使用負數步驟。 -1沒有反轉,它正在步進 –
@PadraicCunningham爲什麼這不工作,雖然作爲'l [2:5:2]'沒有工作我很好奇 – EdChum