繁体   English   中英

如何找到字符串的第一个字符并将其所有结果替换为Python中的相同字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM