2016-03-12 11 views
5

是的,我知道那裏有很多類似的問題。但我無法找到我想要的東西。簡單的Python字符串(向後)切片

我的困惑是關於反向切片。

my_jumble = ['jumbly', 'wumbly', 'number', 5] 
print(my_jumble[:1:-1]) 

現在我發現,結果將是

[5, 'number'] 

所以我想,也許我會測試它通過在字符串的切片改變結束。

print(my_jumble[:2:-1]) 

我是真的相信了Python會給我喜歡

[5, 'number', 'wumbly'] 

相反,它給了我這個這讓我完全失去了一些東西......

[5] 

有人能解釋一下什麼是去這裏?我是Python的新手,發現這很混亂..感謝您的幫助。

回答

7

我想了解什麼在代碼中去的最簡單的方法之一是認識到落後切片反轉的方式,您指數列表(視覺,它是扭轉你的列表) 012sh的變化。

因此,當你有這樣的名單:

['jumbly', 'wumbly', 'number', 5] 
    0  1   2  3 #<-- index 

通過使其向後讀(添加-1作爲第三索引),你把它看起來這樣的(因爲現在從索引最後到第一,而不是從第一個到最後一個):

[5, 'number', 'wumbly', 'jumbly'] 
3  2   1  0  #<-- index 

,然後當你從「開始」一(:1)切片,你會得到一切從「開始」(現「開始」 是3),並停止把1時:

[5, 'number', 'wumbly', 'jumbly'] 
3  2   1  0  #<-- index 
^ ^  x 
grab! grab!  nope! 

因此,你有你的回報:

[5, 'number'] 

同樣的原則也適用於當你落後片與[:2:-1]

[5, 'number', 'wumbly', 'jumbly'] 
3  2   1  0  #<-- index 
^  x 
grab! nope! 

因此你得到了你的結果:

[5] 

現在,使用該原則,如果您想要返回所需內容,您就知道應該如何放置第二個索引器:零! - >[:0:-1]

[5, 'number', 'wumbly', 'jumbly'] 
3  2   1  0  #<-- index 
^ ^  ^  x 
grab! grab!  grab! nope! 

然後,你會得到你想要的結果:如果你不輸入一個值

[5, 'number', 'wumbly'] 
+2

令人驚歎的解釋。我現在明白了。非常感謝。 –

+0

@HarryLens歡迎您! ;)當我們可以看到它時,事情變得更容易理解...... :) – Ian

+0

>向後切片在切片之前先反轉您的列表<任何文檔爲此?我第一次看到這個聲明。 – warvariuc

0

@HarryLens要做你真正想要的,你必須這樣做。

print(my_jumble[-1:0:-1]) 

即使這樣會做:

print(my_jumble[:0:-1]) 

我想你認爲當你由-1跨過去,該列表是相反的。您看到第一個數字表示起始位置,第二個數字表示當前列表中的結束位置(您想要的切片),而不是反向列表。請參閱this.

+0

那麼,什麼是這裏的邏輯是什麼?我的意思是這個'print(my_jumble [:2:-1])'是指從開始到第3個元素向後打印的東西?我很困惑...... @Dhruv –

+1

@Alan,'print(my_jumble [:2:-1])** **不是有效的'[0:2:-1]'試試看:'[0 :2:-1]'只會打印出[]' – Marcus

1

你正在使用的語法list[start:stop:step]

start,甚至不是零,然後python決定一個合適的開始。積極步驟將爲0,否定步驟爲最後一個元素。

因此,在第一個示例中,您有效地選擇從0開始到1的所有項目,但順序相反。所以它打印出來[5,'number']

在你的第二個例子中,你所說的是選擇從第一個到第三個從相反順序開始的所有項目。因此,從相反的順序開始,從5開始,列表中的第三項是'number',但由於您只說到第三項,所以它就停在那裏。

由於您已給出stop的正值,因此它將按照從左到右的順序排列,因此在您的情況下,順序是正確順序的第三個元素。

另請注意,在python中list[start: stop]相當於[start: stop),第一個元素被認爲是排除了右邊界。

1

array[start:end:step]裝置開始與索引start然後在每個循環週期添加到它step和中斷環路如果索引變得大於或等於end。如果省略start,則它等於0.如果省略了end,則將其設置爲len(array)。如果startend爲負值,則設置爲len(array) + startlen(array) + end。如果step爲負數,則將其添加到每個循環週期的當前索引,但當step爲正時,繼續循環的條件爲current_index > end,而不是current_index < end

所以['jumbly', 'wumbly', 'number', 5][:1:-1]意味着開始服用從指數len(array)元素的索引1(不含) - 所以我們給出的項目['number', 5]

>>> ['jumbly', 'wumbly', 'number', 5][:1:-1] 
>>> [5, 'number'] 

['jumbly', 'wumbly', 'number', 5][:2:-1]意味着開始服用從指數len(array)元素的索引2 (價值'number'存儲在索引2的列表中)(不包括) - 所以我們有[5]

還是要解釋一個字符串,其字符索引更好:

>>> '0123'[:1:-1] 
>>> '32' 

>>> '0123'[:2:-1] 
>>> '3'