【问题标题】:Create a function which returns words in the string(REMOVE CHARACTER IN STRING)创建一个返回字符串中单词的函数(REMOVE CHARACTER IN STRING)
【发布时间】:2020-01-23 15:22:10
【问题描述】:
  • 示例 1:"fogfogfffoooofftreesggfoogfog" -- 在此示例中,我需要删除 'fogFOG',我应该得到输出为 'trees'

  • 示例 2:"fogFogFogffffooobirdsandthebeesGGGfogFog" -- 输出应该类似于 'birdsandthebees'

str="fogFogFogffffooobirdsandthebeesGGGfogFog"

str1="fogFOG"

for i in str1:

    Str=str.replace(i,'')
print(Str)

Str=str.replace(i) 出现错误

TypeError: replace() takes at least 2 arguments (1 given)

如果我在列表中单独使用所有字母,我会得到输出。但我想知道我们如何使用单个字符串来做到这一点。

【问题讨论】:

  • 确实,replace takes at least 2 arguments,它应该在 str 的实例上调用,而不是 str 类本身。
  • 你应该首先命名你的变量,而不是使用像 str 这样的保留字
  • 你的问题代码中没有Str=str.replace(i)这一行,那么错误是从哪里来的呢?
  • 请检查您的代码是否与您发布的相同,您得到的错误似乎是您的代码的另一个版本。
  • 通过使用保留的python 类型str,您已经重新定义了它并且可能破坏了所有字符串操作函数。更改您的对象名称,使其不会与 Python 内置类型冲突。

标签: python python-3.x list python-2.7 python-requests


【解决方案1】:

我已经逐字运行了您的代码示例。我没有收到您指定的错误消息,请仔细检查这是否是您运行的。

您的示例中有一个错误。在 for 循环的每次迭代中,您都将“Str”变量(更多关于下面的变量命名)重新声明为 str 字符串减去一个 str1 字符。因此,每次从 str1 中删除一个字符时,下一次迭代都不会保存。我的输出是:

~/Programming$ python yourcode.py
fogFogFogffffooobirdsandthebeesfogFog

这是意料之中的,因为在 for 循环的最后一次迭代中,Str 被声明为 str1 并删除了 'G'。

您可能(?)打算引用您的“str”变量并且只是大写错误。如果是这种情况,您的预期代码将是:

str="fogFogFogffffooobirdsandthebeesGGGfogFog"

str1=['f','o','g','F','O','G']

for i in str1:
    str=str.replace(i,'')
print(str)

以上示例将为您提供所需的输出。请注意,这一次 str 变量不断地重新声明为自身减去一个 str1 字符。所以下一次迭代时,右侧的 str 中仍会丢失该字符。

关于变量命名

一般来说,最好在代码中使用描述性变量名。调用字符串“str”不是很具有描述性,因为它无法将其与其他字符串区分开来。 “str”也是type in Python,在你的代码中重新定义它会破坏事情。 此外,您命名为“str1”的变量实际上不是一个字符串,而是一个列表。这会让阅读它的人感到困惑。 你可能会考虑这样的事情:

result_string ="fogFogFogffffooobirdsandthebeesGGGfogFog"

forbidden_characters=['f','o','g','F','O','G']

for i in forbidden_characters:
    result_string =result_string.replace(i,'')
print(Str)

这使您的代码更具可读性,对您自己和(更重要的是)可能在您的代码上工作的其他人(比如我 :))都是如此。如果您在团队中工作,这一点尤其重要。

在python中,变量名的约定是lowercase with underscores between words.

【讨论】:

  • 谢谢,@Leon。我不明白我的代码可以完美运行而没有任何错误。
  • 这是我的错误,而不是添加 **str1="fogFOG" ** 我已添加到列表中。当我尝试使用上面提到的“str1”实现相同的方法时发生错误。
【解决方案2】:

您可以简单地使用re.sub()str1 中的str 中的所有字符替换为空白:

from re import sub

str1 = "fogFOG"

str = "fogFogFogffffooobirdsandthebeesGGGfogFog"
print(sub(f"[{str1}]",'',str))

str = "fogfogfffoooofftreesggfoogfog"
print(sub(f"[{str1}]",'',str))

输出:

birdsandthebees
trees

请注意,使用现有内置方法的名称作为变量名是一种不好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多