【问题标题】:Find the word from the list given and replace the words so found从给定的列表中找到单词并替换找到的单词
【发布时间】:2021-12-14 14:11:52
【问题描述】:

我的问题很简单,但我一直找不到合适的解决方案。 下面是我的程序:

given_list   = ["Terms","I","want","to","remove","from","input_string"]
input_string = input("Enter String:")
if any(x in input_string for x in given_list):
     #Find the detected word
     #Not in bool format
     a = input_string.replace(detected_word,"")
     print("Some Task",a)

这里,given_list 包含我想从 input_string 中排除的术语。 现在,我面临的问题是 any() 产生 bool 结果,我需要 any() 检测到的单词并将其替换为空白,以便执行某些任务。

编辑: any() 函数根本不需要,在下面寻找有用的解决方案。

【问题讨论】:

  • 那么你必须像[x for x in given_list if x in input_string]一样做同样的循环
  • 如果输入中有多个单词怎么办?
  • 如果有多个单词,那么我只想删除那些在 given_list @Dani Mesejo 中指定的术语
  • 顺便说一句,如果您想删除单词,这种方法将不起作用,例如,如果出现 Illusion 一词
  • 给定的列表是否包含多标记项?

标签: python python-3.x list any


【解决方案1】:

遍历 given_list 并替换它们:

for i in given_list:
    input_string = input_string.replace(i, "")
print("Some Task", input_string)

【讨论】:

    【解决方案2】:

    根本不需要检测:

    for w in given_list:
         input_string = input_string.replace(w, "")
    

    str.replace 如果单词不存在并且检测所需的子字符串测试无论如何都必须扫描字符串,则不会做任何事情。

    【讨论】:

      【解决方案3】:

      查找每个单词并替换它的问题是 python 将不得不重复遍历整个字符串。另一个问题是您会在不想要的地方找到子字符串。例如,“to”在排除列表中,因此您最终会将“tomato”更改为“ma”

      在我看来,您似乎想要替换整个单词。解析是一个全新的主题,但让我们简化一下。我只是假设所有内容都是小写的,没有标点符号,尽管以后可以改进。让我们使用 input_string.split() 来遍历整个单词。

      我们想用空替换一些单词,所以让我们遍历 input_string,并使用同名的内置函数过滤掉我们不想要的单词。

      exclude_list   = ["terms","i","want","to","remove","from","input_string"]
      input_string = "one terms two i three want to remove"
      keepers = filter(lambda w: w not in exclude_list, input_string.lower().split())
      output_string = ' '.join(keepers)
      print (output_string)
      

      一二三

      请注意,我们创建了一个迭代器,它允许我们只遍历整个输入字符串一次。而不是替换单词,我们基本上只是通过让迭代器不返回我们不想要的单词来跳过它们。

      由于过滤器需要一个函数来检查是否包含或排除每个单词,因此我们必须定义一个。我使用“lambda”语法来做到这一点。您可以将其替换为

      def keep(word):
          return word not in exclude_list
      
      keepers = filter(keep, input_string.split())
      

      【讨论】:

      • 谢谢@Kenny Ostrom。但我对 Python 还很陌生,不知道什么是 lambda 语法。我使用了一种更简单的方法(由@BTables 提供),因为我正在做的工作是初级水平。
      • 你可以只定义一个函数,而不是 lambda。
      • 我几天前开始python编程,不知道如何定义函数。 @肯尼奥斯特罗姆
      【解决方案4】:

      要回答您关于 any 的问题,请使用赋值表达式 (Python 3.8+)。

      if any((word := x) in input_string for x in given_list):
          # match captured in variable word
      

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 2012-10-01
        • 2012-11-09
        • 2017-04-26
        • 2021-12-29
        • 2023-03-29
        • 2020-04-26
        • 2016-08-19
        • 2014-03-04
        相关资源
        最近更新 更多