2014-11-05 104 views
2

为什么[:-0]返回空字符串?我的代码中有一个变量,它决定了必须剪切的字符串的长度。问题是,当此变量中存在int(0)时,它会返回空字符串。从字符串剪切零字符(字符串[: - 0]) - Python

例子:

def rightPass(word,value): 
    substring = word[:-value] 
    return substring 

for i in range(3,-1,-1): 
    print rightPass('word',i) 

>>> w 
>>> wo 
>>> wor 
>>> 

我不知道这是不是一个大问题来做到这一点:

def rightPass(word,value): 
    substring = word[:-value] if value!=0 else word 
    return substring 

但为什么是[:-0]演戏这条路,我不能找到一个理由。

我虽然这是因为Python不知道-0值,但我试过它使用0和发生同样的问题。

有人可以解释吗?

回答

2

您正在要求Python创建一个从索引0到索引0的新字符串。这是一个空片。

切片的结束值是排他性的。 Python从起始索引中挑选出结束索引中的所有字符。这里-00是一样的东西(负零与正零相同)。

请注意,这与使用实际负值不同; [0:-1]将取长度并用len(object) - 1代替负值并将其用作最终值,但此不适用于-0,因为这不是负值!

可以使用None而不是0如果你想切到最后:

substring = word[:-value if value else None] 
+0

谢谢你,当然我的意思范围(3,-1,-1)。我编辑了我的问题。 – 2014-11-05 17:59:27

1

切片中的第二个参数是结束位置。

[start : stop : step] 

startstop范围为半开,这意味着它包括start直到但不包括stop

所以[: 0]表示从[0]开始,停在但不包括[0],它只能是空字符串。