[英]How to find the first character of a string and replace all findings of it in the same string in Python?
我正在尝试创建一种方法,该方法引入一个字符串,查找该字符串的第一个字母,然后用另一个字符替换该字母的所有出现。
将s [letter]用于新字符显然不起作用,因为在这种情况下,字母不是索引。 但是应该使用什么解决方案呢?
def fix_start(s):
letterToReplace = s[0]
for letter in s:
if letter is letterToReplace:
s[letter] = '*'
return s
请始终随手携带本手册。 str
类型具有一种甚至称为replace
。
str.replace(old,new [,count])
返回该字符串的副本,其中所有出现的子字符串old都替换为new。 如果给出了可选的参数count,则仅替换第一个出现的计数。
所以,你可以做
def fix_start(s):
return s.replace(s[0], '*')
请注意,如果遇到无法仅仅进行str.replace
(例如,您具有字符串列表 ,而不是字符串列表 ),则enumerate
函数非常方便。 它将为您提供元素及其索引 :
def fix_start(sl):
elementToReplace = sl[0]
for idx, elem in enumerate(sl):
if elem == elementToReplace:
sl[idx] = '*'
return sl
在这种情况下,不要在侧面节点上测试letter is letterToReplace
。 is
操作员测试身份 ,而不是相等性。 身份表示其相同的对象(例如,相同的内存地址),而相等表示其具有相同的含义(例如,表示字母A
)。
对于基本的基本类型(字符,小整数等),python仅保留一个对象。 例如, int(1) == int(1)
和int(1) is int(1)
等于int(1) is int(1)
。 但是, foo = int(123123); (foo == 123123, foo is 123123)
foo = int(123123); (foo == 123123, foo is 123123)
将无法通过is
测试。
您可以使用re
库:
import re
def fix_start(s):
return re.sub(s[0], "*", s)
print(fix_start("string"))
输出:
*tring
另一种方式是这样的:
def fix_start(s):
return "".join(map(lambda x: '*' if x is s[0] else x, s))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.