You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:24:26