【问题标题】:Python function that changes every instance of a word in a string to another word [duplicate]Python函数将字符串中单词的每个实例更改为另一个单词[重复]
【发布时间】:2020-10-03 22:58:53
【问题描述】:

我创建了这个函数:

def change(string,word1,word2):
    string=string.split(" ")
    for x in string:
        if x==word1:
            x=word2
    string=" ".join(string)
    print (string)

v1= "X went to buy food. X forgot his car keys in the car."

change(v1,"X","Y")

但是输出还是:

"X went to buy food. X forgot his car keys in the car."

输出应该是:

"Y went to buy food. Y forgot his car keys in the car."

代码有什么问题?为什么它不起作用?

编辑: 伙计们,感谢所有解决方案,但我想知道为什么这不起作用?这样我以后就不会犯类似的错误了。

【问题讨论】:

  • 不能用replace吗?喜欢v1.replace('X','Y')
  • 字符串是不可变的,并且分配给裸名不会首先发生变化。请改用str.replace
  • 我认为像这样定义changedef change(string,word1,word2): print(string.replace(word1, word2)) 会更好
  • 理想函数应该如何处理这句话:“X忘记了字母表以3个字符XYZ结尾”?我的意思是,你想要实际的单词替换吗? “XYZ”会保留为“XYZ”吗?那将是正确的单词替换。

标签: python function replace


【解决方案1】:

尝试一个简单的替换:

mystring = "X went to buy food. X forgot his car keys in the car."
new_string = mystring.replace("X","Y")

print(mystring)
print(new_string)

输出:

X went to buy food. X forgot his car keys in the car.
Y went to buy food. Y forgot his car keys in the car.

或者只是稍微改变一下你的方法:

def change(string,word1,word2):
    string=string.split(" ")
    newstring=[]
    for x in string:
        #print(x)
        if x == word1:
            x=word2
        newstring.append(x)    
    newstring=" ".join(newstring)
    print (newstring)


change(mystring,"X","Y")

输出:

Y went to buy food. Y forgot his car keys in the car.

【讨论】:

    【解决方案2】:
    def change(string, word1, word2):
        string = string.split(" ")
        for x in range(len(string)):
            if string[x] == word1:
                string[x] = word2
        string = " ".join(string)
        print(string)
    

    如上所述更改 for 循环将提供您预期的输出。

    【讨论】:

    • 那行不通。另外,您假设 word1word2 是单个字符。
    • 假设“字符串”是单词列表。 Bcz 在代码中他对“string”使用了 split 函数,并再次将其分配给“string”
    • @goodvibration 现在检查它的工作更新代码。
    【解决方案3】:
    def change(string,word1,word2):
        changed_string = string.replace(word1,word2)
        print(changed_string)
    v1= "X went to buy food. X forgot his car keys in the car."
    
    change(v1,"X","Y")
    

    【讨论】:

    • 请注意问题是“代码有什么问题?为什么它不起作用?”。
    • 请补充说明。为什么OP有问题?你的代码是如何解决这个问题的?
    • 虽然此代码可以解决 OP 的问题,但最好包含有关您的代码如何解决 OP 问题的说明。这样,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。高质量、完整的答案强化了这一想法,并且更有可能获得支持。这些功能,加上所有帖子都是独立的要求,是 SO 作为一个使我们与论坛区分开来的平台的一些优势。您可以编辑以添加其他信息和/或使用源文档补充您的解释。
    • 另外,如果您的“回答”解决了 OP 发布的问题,您的回答可能被视为未回答,并可能被社区考虑删除。请考虑“编辑”以符合答案的 SO 准则,或考虑改为发表评论。访问guidelineshelp 了解更多信息。
    【解决方案4】:

    Python 有一个内置的,.replace()

    "The orange orange gleamed of orange.".replace("orange", "purple")
    # "The purple purple gleamed of purple."
    

    【讨论】:

      【解决方案5】:

      试试这个:

      def change(string,word1,word2):
          return word2.join(string.split(word1))
      

      【讨论】:

        猜你喜欢
        • 2019-04-07
        • 1970-01-01
        • 2020-09-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多