Python字符串是否可变?不可变前提下如何在中间位置插入字符?
Python字符串指定位置修改/插入字符解决方案
Python 中的字符串是不可变序列类型,本身不支持通过下标直接修改对应位置的元素,示例代码中的 s[5] = '-'运行时会抛出TypeError: 'str' object does not support item assignment错误,可以通过以下几种常见方式实现需求:
方法1:字符串切片拼接(最常用,无需引入依赖)
将原字符串从目标位置切为前后两段,中间拼接要替换/插入的字符后组合为新字符串即可。
- 替换指定位置字符示例:
s = "hello world" # s[:5] 取索引0到4的子串,s[6:]取索引6到末尾的子串,中间拼接'-' new_s = s[:5] + '-' + s[6:] print(new_s) # 输出:hello-world
- 指定位置插入字符示例(不覆盖原有字符):
s = "hello world" # 前后切片都截止/起始于插入位置,原有字符不会被覆盖 new_s = s[:5] + '-' + s[5:] print(new_s) # 输出:hello- world
方法2:转可变列表修改后转回字符串
如果需要对字符串做多处修改,先转成列表操作效率更高,列表支持直接通过下标修改元素。
示例代码:
s = "hello world" # 字符串转列表 s_list = list(s) # 直接修改对应下标位置的元素 s_list[5] = '-' # 列表转回字符串 new_s = ''.join(s_list) print(new_s) # 输出:hello-world
方法3:转bytearray修改(仅适用于ASCII字符场景)
如果处理的是纯ASCII编码的字符串,也可以转成bytearray类型修改,该方式使用场景相对有限。
示例代码:
s = "hello world" s_byte = bytearray(s, encoding='utf-8') # 赋值需要传字符对应的ASCII编码,用ord()方法转换 s_byte[5] = ord('-') new_s = s_byte.decode() print(new_s) # 输出:hello-world
内容的提问来源于stack exchange,提问作者Chaitanya Vamsi
相关产品推荐
相关产品推荐

