【问题标题】:Substituting the instance of a character, except the first, in a input string替换输入字符串中的字符实例,第一个字符除外
【发布时间】:2020-08-05 19:42:44
【问题描述】:

由于 python 中的字符串是不可变的,我尝试了这个解决方法:我首先在其字符组件中破坏了字符串,将它们放在一个列表中。然后我继续在这个列表中循环并将我想修改的字符的第二次出现替换为目标字符。 最后一部分当然是从这样获得的新列表中重新构建字符串。

def modify():
  space = " "
  # This is the input part
  varstr = input("Insert a string to modify:\n> ")
  if space in varstr:
     print("Please insert a string without space")
     modify()
  varchar = input("Insert a SINGLE character to modify in $:\n> ")
  if len(varstr) > 1:
    print("Please insert a single character, without spaces")
  counter = 0
  liststr = []
  stringout = ""
  #Creating the list composed by the characters of the string
  for i in varstr:                  
      liststr.append(i)
  #Looping through the string and substituting the character from its second occurence
  for j in range(len(liststr)):
      if counter >= 1 and liststr[j] == varchar:
      liststr[j] = "$"
  elif counter == 0 and liststr[j] == varchar:
      counter += 1
  for k in liststr:
      stringout += k 
  return stringout 

我的问题是:这段代码可以更整洁一点吗?

编辑:示例输入可能是“Google”和字符“o”。那么样本输出将是

Go$gle

【问题讨论】:

  • 使用样本输入和样本输出会更容易理解。请提供minimal reproducible example
  • 这将替换从第二个开始的所有事件。这是需要的吗?
  • 我在文章末尾添加了示例输入和输出。
  • @schwobaseggl 是的!就是这样。

标签: python string loops


【解决方案1】:

您可以执行以下操作:

char = "a"
stri = "santaclaus"
char.join("$".join(s.split(char)) for s in stri.split(char, 1))
# 'sant$cl$us'

这会在第一次出现 char 时拆分,并在“char.splitting 和 '$'.joining”之后将标记重新连接在一起。

【讨论】:

    【解决方案2】:
    def modify():
        while True:  
            varstr = input("Insert a string to modify:\n> ")
            if ' ' in varstr:
                print("Please insert a string without space")
            else:
                break
        while True:
            varchar = input("Insert a SINGLE character to modify in $:\n> ")
            if len(varchar) > 1:
                print("Please insert a single character, without spaces")
            else:
                break
        return varstr[0] + varstr[1:].replace(varchar, '$')
    

    【讨论】:

      【解决方案3】:

      试试这个:

      def modify():
          while True:
              varstr = input("Insert a string to modify:\n> ")
              if len(varstr) > 0 and ' ' not in varstr:
                  break
              print("Please insert a string without space")
          while True:
              varchar = input("Insert a SINGLE character to modify in $:\n> ")
              if len(varchar) == 1 and varchar != ' ':
                  break
              print("Please insert a single character, without spaces")
          first = varstr.find(varchar) + 1
          varstr = varstr[:first] + varstr[first:].replace(varchar, "$")
          return varstr
      

      关于问题代码的几点说明:

      • 您可以使用如图所示的 while 循环而不是递归来重复输入。如果你真的想使用递归,你必须在modify() 调用之后添加一个return
      • 如果要将字符串转换为字符列表,可以使用strlist = list(varstr)。然后你可以变异,并使用''.join(strlist)返回字符串

      【讨论】:

        猜你喜欢
        • 2017-12-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        • 1970-01-01
        • 1970-01-01
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多