用字符串中的特殊字符替换字符

时间:2014-04-07 14:57:46

标签: python string python-2.7

我正在尝试编写一个简单的python代码来从用户获取一个字符串,并返回其第一个字符的所有出现都已更改为" *",期待第一个字符本身!

示例:" babble"收益率" ba ** le"

def main():
    string = raw_input("Enter a string:")
    string_len = len(string)
    string_final = range(0,string_len-1)

    for i in range(0,string_len-1):
        if string[0] == string[i+1]:
           string_final[i] = "*"
        else:
            string_final[i] = string[i]
    print string_final

if __name__ == '__main__':
    main()

输出

>>> 
[u'b', '*', '*', u'b', u'l']

我期待输出

["b" "a" "*" "*" "l" "e"]

有人可以告诉我,我在这里缺少什么?

3 个答案:

答案 0 :(得分:1)

你可以这样做:

def a(your_str):
    return your_str[0]+''.join(['*' if i==your_str[0] else i for i in your_str[1:]])

示例:

>>> a('babble')
'ba**le'

>>> a('tomato')
'toma*o'

>>> a('hehehe')
'he*e*e'

答案 1 :(得分:1)

您也可以使用string.replace

>>> s = "babble"
>>> s[0] + s[1:].replace(s[0], "*")

输出:

'ba**le'

答案 2 :(得分:0)

如果您要比较i + 1处的字符,请在与原始字符不匹配时复制该字符,而不是i处的字符:

if string[0] == string[i + 1]:
    string_final[i] = "*"
else:
    string_final[i] = string[i + 1]  # copy the character at i + 1

这可以简化为:

string_final[i] = "*" if string[0] == string[i + 1] else string[i + 1]

你的循环当然不会将第一个字符包含在string_final中;您只需使用.append()来电,而不是使用range()预先构建列表:

string = raw_input("Enter a string:")
string_final = string[:1]

for i in range(0, len(string) - 1):
    string_final.append("*" if string[0] == string[i+1] else string[i+1])

print string_final

要在一行中执行您的功能,需要使用str.join()和具有相同条件表达式的列表推导:

string_final = string[0] + ''.join(['*' if s == string[0] else s for s in string[1:]])