Python 字符串中的替换
a = "kava"
a = a.replace(a[3:], "-" * (len(a) - 3))
print(a)
在没有多个字符的单词中是可以的。例如“kavo”。但在“aaaa”中会替换掉所有字符。我本来期待得到“kav-”,但结果却是“k-v-”。
我不知道为什么,你能帮我吗?谢谢!
3 个回答
0
如果你想要替换字符串中最后出现的一个字母,可以使用 .rindex()
方法来找到它的位置。在Python中,字符串是不可改变的,所以你需要把字符串转换成一个列表,然后把新的值放到找到的位置上。最后,再从更新后的列表中创建一个新的字符串。
a = "kava"
# Get the index of the last occurrence of 'a'
last_index = a.rindex("a")
# Create a list from the string
a_list = [_ for _ in a]
# Replace the letter at 'last_index' position
a_list[last_index] = "-"
# Create a new string
a = "".join(a_list)
print(a) # Output: 'kav-'
0
我们来看看你的代码,看看你在做什么:
a = "kava"
a = a.replace(a[3:], "-" * (len(a) - 3))
print(a)
你创建了一个字符串 a
,它的值是 "kava"。然后你从索引为3的字符开始取东西(索引是从0开始的),这个位置的字符就是最后一个 "a",你用它来替换 str.replace()
中的内容。
替换用的字符串是一个连字符(-)重复... 一次。这其实就是一个单独的 '-'。
如果想更简洁地写这一行,可以这样:
a.replace('a', '-')
查看一下 str.replace(old, new[, count])
的文档:
返回一个字符串的副本,将所有出现的子串 old 替换为 new。
这就是发生的事情:所有的 'a' 都被替换成了一个连字符。结果是 "k-v-"。
如果你只想替换最后一个字母,可以先把字符串切片,得到除了最后一个字母以外的部分,然后再加上一个连字符:
a = "kava"
a[:-1] + "-"
print(a)
# kav-
3
这个问题是因为Python的replace
方法会把字符串中所有相同的字符都替换掉。比如说,如果你想把“kava”这个字符串最后一个“a”替换成一个破折号(“-”),结果会是把所有的“a”都替换掉,变成“k-v-”。而对于“aaaa”这个字符串,因为所有的字符都是“a”,最后只剩下一个破折号“-”。
如果你想只替换字符串最后的N个字符为破折号,应该用字符串切片和拼接的方法,而不是用replace
。比如:
a = "kava"
# Replace the last N characters with dashes
N = 1
a = a[:-N] + "-" * N
print(a) # Output: kav-