Python通过索引创建删除指定字符的新字符串时切片写法疑问
错误原因分析
Python 切片遵循 [起始索引:结束索引:步长] 的规则,默认步长为 1(从左向右遍历),当步长为正时,要求起始索引对应的序列位置要在结束索引对应的位置左侧,否则切片会返回空字符串。
你写的 str[-1:-(n+1)] 存在两个核心问题:
- 未指定负步长的情况下,
-1是序列最后一个字符的索引,位置必然在-(n+1)(从末尾数第n+1个字符的索引)的右侧,因此切片结果为空,拼接后自然得不到预期结果。 - 就算补充负步长写成
str[-1:-(n+1):-1],得到的也是从后往前倒序的子串,和你需要的n+1到末尾的正序子串不符,依然不符合需求。
举个实际示例说明:假设原字符串为 abcdef(长度6,索引0~5),要去掉索引 n=2 的字符 c:
错误写法的切片为 str[-1:-3],-1 对应位置5的字符 f,-3 对应位置3的字符 d,步长为正要求从左往右遍历,f 位置在 d 右侧,最终切片结果为空,拼接后只能得到 ab,不符合预期。
正确写法逻辑说明
你最初使用的 newstr = str[:n] + str[n+1:] 是最简洁的正确实现:
str[:n]从字符串开头取到索引n的前一位(Python 切片遵循左闭右开规则),覆盖n之前的所有字符str[n+1:]从索引n+1取到字符串末尾,覆盖n之后的所有字符
两者拼接正好跳过了索引为n的单个字符,完全符合需求。
小提示:
str是Python内置的字符串类型关键字,建议不要用它作为变量名,避免覆盖内置功能。
内容的提问来源于stack exchange,提问作者4life2be
相关产品推荐
相关产品推荐

