2012-04-05 205 views
12

有人給了我一個語法來截斷字符串,如下:截斷在python字符串

string = "My Text String" 

print string [0:3] # This is just an example 

我不知道這是什麼被稱爲(字符串[0:3]的語法),所以我已經很難在互聯網上查看它並理解它是如何工作的。到目前爲止,我覺得它的工作原理是這樣的:

  • 字符串[0:3]#返回字符串中的第3個字符
  • 字符串[0:-3]#將返回字符串的最後3個字符
  • 串[3:-3]#似乎截斷前3個字符和最後3個字符
  • 字符串[1:0]#我返回2個單引號....不知道這是做
  • string [-1:1]#與最後一個相同

總之,我可以添加其他幾個例子,但我的觀點是我對這個功能很陌生,我想知道它叫什麼,以及在哪裏可以找到更多信息。我確信我只是在某個地方錯過了一個很好的參考。

感謝您的任何建議, 麥克

+3

它被稱爲切片,操作稱爲切片。 – kindall 2012-04-05 19:00:19

+3

請參閱[這個着名的問題](http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation)。 – DSM 2012-04-05 19:02:08

+0

此圖表在@DSM提供的鏈接中:http://stackoverflow.com/a/509297/401828 – heltonbiker 2012-04-05 19:07:37

回答

18

它被稱爲切片:

S [I:Y:k]的

S的從i到j的切片被定義作爲具有 索引k的項目的序列,使得我< = k < j。如果i或j大於len(s),請使用len(s)。如果我省略或無,請使用0.如果j省略或無,請使用012(x)。如果我大於或等於j,則切片爲空。

source

+1

非常感謝Uku!感謝你給它一個名稱和它如何工作的一個很好的例子。非常感激! – Mike 2012-04-05 19:08:21

8

由於@Uku和@thebjorn表示,其想叫Slicing

但一個更簡單的方法是考慮像一個列表的字符串,例如,你可以這樣做:

text = 'Any String' 
for letter in text: 
    print letter 

而且如果你想獲得這樣的字符串內特定字母相同:

>> text = 'Any String' 
>> text[4] 
'S' 

PS:請記住,它是從零開始,所以文[4]返回第5號。

使用切片它會從您的原始字符串中返回一個「子字符串」文本[i:j],其中「i」是初始索引(包含)和「j」是結束索引(獨佔),例如:

>> text = 'Any String' 
>> text[4:6] # from index 4 to 6 exclusive, so it returns letters from index 4 and 5 
'St' 
>> text[0:4] 
'Any ' 
>> text[:4] # omiting the "i" index means i = 0 
'Any ' 
>> text[4:] # omitting the "j" index means until the end of the string 

負指數相對於像從負指數製備取代的字符串的末尾爲「LEN(文本)+ I」。

在我們的例子中,len(text)是10,負索引-1就像使用text [9]獲取最後一個元素,-2將返回最後一個元素等等。

在你送的例子,字符串[0:-3]應該返回的一切,但最後3個字符和字符串[3:-3]應該返回的一切,但第3和最後3

希望它helpped。