【问题标题】:python check if anagram on a stringpython检查字符串上的字谜
【发布时间】:2021-12-12 03:59:39
【问题描述】:

你好,我做了一个函数来检查两个字符串是否是一个字谜,但是我不知道如何在一个完整的句子上实现它,例如:

  • 'voLa' 'alVo' ----->这些词是一个字谜,它返回True

但我想做的是像这样的鸡蛋:

  • '你好,我的名字是...',----->'你好,我的名字是...'

我不知道怎么做,谁能帮帮我?

 def anagram(a, b):
   if len(a)==len(b) and sorted(a)==sorted(b):
     return True
   else:
     return False

【问题讨论】:

  • 那么你想从字符串中删除字谜吗?
  • 您要删除字谜?它可以出现在文本中的任何位置或只有一个单词旁边的一般情况是什么?
  • @UlisesBussi,我只是要放下整个问题。这个函数接收一个充满错误的字符串,我之前制作的一个函数可以纠正这些错误并返回一个字符串,但带有字谜。这个最终函数应该返回过滤后的字符串,其中包含更正的单词和删除的字谜,只留下第一次出现的字谜,在更正单词后评估字谜,并且只对对应于不同单词的字谜进行评估(与先前单词不同的字符串被删除, egg 'data tada base has wrong data', 已删除 tada。
  • 将字符串拆分为单词列表。浏览列表,测试一个词是否是任何其他词的字谜。如果没有,请将其添加到结果列表中。
  • 例如缩写是e.g.,而不是egg

标签: python anagram


【解决方案1】:

要过滤出现的字谜,您可以将原始单词放在字典中,其中键由排序的字母组成。任何后续单词都将通过在字典中查找其排序字母来找到该字谜。要隔离单词,最好使用正则表达式,因为您可以使用 sub() 函数将单词替换为函数的结果。

import re

def stripAnagram(match):
    word = match.group().lower()
    key  = "".join(sorted(word))
    if anagrams.setdefault(key,word) != word:
        return ''
    return match.group()

s =  'data tada base has wrong data'
anagrams = dict()
s = re.sub(r'\w+',stripAnagram,s)
print(s)
data  base has wrong data

【讨论】:

    【解决方案2】:

    如果字谜出现在原始单词旁边,您可以稍微修改一下您的函数以检测字谜并执行以下操作:

    def isAnagram(a, b):
        if sorted(a.lower())==sorted(b.lower()) :
            return True
        else:
            return False
    
    #this is the same as the above
    # def isAnagram(a, b):
    #    return sorted(a.lower())==sorted(b.lower()) 
    

    然后删除字谜:

    def removeAnagrams(phrase):
        words = phrase.split(' ')
        newWords = []
        oldWord = ''
        for word in words:
            if not isAnagram(word, oldWord):
                newWords.append(word)
            oldWord = word
        print(newWords)
        newPhrase = ' '.join(newWords)
        return newPhrase 
    

    和测试:

    phrase = "There was a beautifyll day. The saw was sharped"
    print(removeAnagrams(phrase))
    #There was a beautifyll day. The saw sharped
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2014-04-13
      • 2016-06-24
      • 2020-10-28
      • 1970-01-01
      • 2015-12-23
      • 2016-04-07
      相关资源
      最近更新 更多