2012-04-05 169 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。