Python 里的字符串不能直接修改某一个位置的字符

1. 题目考点

这道题主要考:

字符串索引、字符串不可变性、列表修改、字符串拼接、函数返回值、输入拆分。

它的核心不是复杂算法,而是让你理解:Python 里的字符串不能直接修改某一个位置的字符。

比如下面这样是不允许的:

s = "abracadabra"
s[5] = "k"

会报错,因为字符串是不可变类型。


2. 审题

题目要求:

给你一个字符串 string,再给你一个位置 position 和一个字符 character,把字符串中 position 这个索引位置上的字符替换成 character,然后返回修改后的字符串。

输入格式是:

第一行:

abracadabra

第二行:

5 k

表示:

string = "abracadabra"
position = 5
character = "k"

注意,Python 字符串索引从 0 开始,不是从 1 开始。

所以:

a b r a c a d a b r a
0 1 2 3 4 5 6 7 8 9 10

索引 5 位置上的字符是 "a",要改成 "k"

结果就是:

abrackdabra

3. 思路提示

这题最关键的一句话是:字符串不能直接改,但列表可以改。

所以可以这样想:

第一步,把字符串变成列表。

"abracadabra"

变成:

['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

第二步,修改列表中指定索引位置的元素。

把索引 5"a" 改成 "k"

第三步,再把列表重新拼成字符串。

这就是最适合初学者的做法。


4. 完整设计思路

这道题可以拆成 3 步:

第一步:把字符串转成列表

因为字符串不能修改单个字符,但是列表可以修改元素。

string_list = list(string)

第二步:修改指定位置

题目给了 position,表示要修改的位置;给了 character,表示新字符。

string_list[position] = character

第三步:把列表重新拼回字符串

列表不能直接作为答案返回,需要重新变成字符串。

new_string = ''.join(string_list)

这里的 ''.join(...) 的意思是:用空字符串作为连接符,把列表里的字符一个一个连起来。


5. 代码实现

def mutate_string(string, position, character):
    string_list = list(string)
    string_list[position] = character
    new_string = ''.join(string_list)
    return new_string


if __name__ == '__main__':
    s = input()
    i, c = input().split()
    s_new = mutate_string(s, int(i), c)
    print(s_new)

6. 模板代码解释

这几行是 HackerRank 常见的输入模板:

if __name__ == '__main__':

初学阶段可以先理解为:程序从这里开始正式运行。

s = input()

读取第一行字符串。

例如输入:

abracadabra

那么:

s = "abracadabra"

下一行:

i, c = input().split()

读取第二行,并用空格拆开。

例如输入:

5 k

经过 split() 之后变成:

["5", "k"]

所以:

i = "5"
c = "k"

注意,此时 i 是字符串 "5",不是整数 5

所以调用函数时要写:

int(i)

"5" 转成整数 5


7. 运行演示

输入:

abracadabra
5 k

程序执行过程:

s = "abracadabra"
i = "5"
c = "k"

调用函数:

mutate_string("abracadabra", 5, "k")

进入函数后:

string_list = list(string)

得到:

['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

修改索引 5

string_list[5] = "k"

得到:

['a', 'b', 'r', 'a', 'c', 'k', 'd', 'a', 'b', 'r', 'a']

再拼回字符串:

new_string = ''.join(string_list)

结果:

"abrackdabra"

最终输出:

abrackdabra

8. 另一种做法:字符串切片

除了转成列表,还可以用切片。

思路是:

原字符串 = 前半部分 + 新字符 + 后半部分

def mutate_string(string, position, character):
    return string[:position] + character + string[position + 1:]

用样例解释:

string = "abracadabra"
position = 5
character = "k"

那么:

string[:5]

得到索引 5 之前的内容:

abrac
string[6:]

得到索引 5 后面的内容:

dabra

所以:

"abrac" + "k" + "dabra"

结果就是:

abrackdabra

不过对于初学者来说,建议先掌握“转列表再修改”的方法,因为它更直观。


9. 方法总结

这类题以后可以这样判断:

只要题目说“修改字符串中某个位置的字符”,你就要马上想到:

Python 字符串不能直接修改。

常见做法有两个:

方法思路适合程度
转列表再修改list() → 修改元素 → join()初学者最推荐
字符串切片前半段 + 新字符 + 后半段更简洁,但需要熟悉切片

记住一句话:

字符串不能原地改,列表可以原地改。


10. 同类型练习

请你尝试完成下面的小练习。

题目:

输入一个字符串、一个索引位置、一个新字符,把该位置的字符替换掉,并输出新字符串。

示例输入:

python
0 P

示例输出:

Python

提示:

先把 "python" 转成列表,再把索引 0 的字符改成 "P",最后用 ''.join() 拼回字符串。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇