Python字符串切片疑问:为何var1[:6]未输出W字符?
搞懂Python字符串切片的「左闭右开」规则
嘿,我刚从JavaScript和PHP转Python的时候也踩过这个坑!咱们一步步把你的困惑理清楚:
首先看你的示例代码:
var1 = 'Hello-World!' print("var1[:6]: ", var1[:6]) # 输出 Hello-
你疑惑为什么索引6的W没被包含进去,核心原因就是Python的字符串切片遵循左闭右开的规则——直白点说,[start:end]这种语法里:
start对应的字符会被包含在结果里end对应的字符不会被包含,它只是「停止取字符的位置」
拆解你的例子:
var1[:6]等价于var1[0:6],意思是「从索引0开始取,到索引6就停下,不拿索引6的字符」- 实际取的是索引
0、1、2、3、4、5对应的字符:H、e、l、l、o、-,拼起来就是Hello- - 要是想把索引6的
W包含进来,切片得写成var1[:7]——这时候截止位置是7,就能覆盖到索引6的字符了
对比你熟悉的语言帮你理解:
- 其实JavaScript的
slice()方法也是同样的左闭右开逻辑,比如"Hello-World!".slice(0,6)也会返回Hello-; - PHP的
substr($str, 0, 6)是指定「从0开始取6个字符」,效果和Python的[:6]完全一致,只是写法不同。
你之前的误区应该是把切片的第二个参数当成了「最后一个要包含的索引」,但在Python里它是「停止位置」。这种设计其实很实用:比如var1[a:b]的字符长度正好是b - a,计算起来特别方便!
再补几个例子巩固下:
var1 = 'Hello-World!' print(var1[6:12]) # 取索引6到11 → World!(长度是12-6=6) print(var1[3:7]) # 取索引3到6 → lo-W
内容的提问来源于stack exchange,提问作者Nalin Nishant
相关产品推荐
相关产品推荐

