7

我想用“!”替换字符串“aeiou”中不是“i”的每个字符

我写:

def changeWord(word):
    for letter in word:
        if letter != "i":
            word.replace(letter,"!")
    return word

这只是返回原件。我怎样才能返回“!!i!!”?

4

6 回答 6

11

Python 中的字符串是不可变的,因此您无法就地更改它们。查看str.replace 的文档

返回字符串的副本,其中所有出现的子字符串 old 都替换为 new。如果给定了可选参数 count,则仅替换第一个 count 出现。

因此,要使其工作,请执行以下操作:

def changeWord(word):
    for letter in word:
        if letter != "i":
            word = word.replace(letter,"!")
    return word
于 2012-11-18T03:17:35.157 回答
6

正则表达式对于这类事情非常强大。这会将任何不是“i”的字符替换为“!”

import re
str = "aieou"
print re.sub('[^i]', '!', str)

返回:

!!i!!
于 2012-11-18T03:18:34.683 回答
3

像这样使用split()join()

In [4]: strs="aeiou"

In [5]: "i".join("!"*len(x) for x in strs.split("i"))
Out[5]: '!!i!!'
于 2012-11-18T03:15:07.177 回答
3

试试这个,作为一个单行:

def changeWord(word):
    return ''.join(c if c == 'i' else '!' for c in word)

可以使用生成器简洁地表达答案,在这种情况下无需使用正则表达式或循环。

于 2012-11-18T03:32:51.767 回答
2

似乎没有人给予任何爱str.translate

In [25]: chars = "!"*105 + 'i' + "!"*150

In [26]: 'aeiou'.translate(chars)
Out[26]: '!!i!!'

希望这可以帮助

于 2012-11-18T03:35:35.237 回答
0

通常在 python 中字符串是不可变的,这意味着它在创建后无法更改。所以我们必须将字符串转换为可变的,这可以使用列表来实现,因为它是可变的。

字符串="爱"

editable = list(string)
editable[2]='s'
string=''.join(editable)

输出:输

于 2020-05-10T00:31:44.973 回答