【问题标题】:A function that uses a string and string list and returns all the words in the list that are anagrams of the string使用字符串和字符串列表并返回列表中作为字符串变位词的所有单词的函数
【发布时间】:2014-11-14 23:38:14
【问题描述】:

我想定义一个函数 find_anagrams_in_word_list(str,str_list) ,其中参数应该是一个字符串和一个字符串列表。返回的值应该是 str_list 中作为 str 值的所有字符串的列表。

我有一个简单的代码,可以让您查看一个单词是否是另一个单词的字谜

def anagram(str1,str2):
    str1 = sorted(str1)
    str2 = sorted(str2)
    if str1 == str2:
        print("True")
    else:
        print("False")

但我似乎无法理解如何将其用于列表。

编辑

def anagram(str1,str2):
    str1 = sorted(str1)
    str2 = sorted(str2)
if str1 == str2:
    print("True")
else:
    print("False")

def find_anagrams_in_word_list(str1,str_list):
    anagrams = []
    for word in str_list:
        if word == str1:
            if (anagram(str1,word)):
                anagrams.append(word)
                print(anagrams)

我在创建此代码方面已经走了这么远,但是如果它们是“str1”的字谜,它不会打印单词,而是打印“[]”,我认为这意味着 str_list 中的单词没有被附加到“字谜”

我想要这样的输出

find_anagrams_in_word_list("rat", "[art,tar,gar,jay]")

'艺术' '焦油'

因为它们是老鼠的字谜。

【问题讨论】:

  • 所以你为str_list中的每个stranagram(str1, str)
  • 你知道如何在 Python 中编写任何类型的循环结构吗?如果没有,请参阅for StatementsList Comprehensions 上的教程。
  • @abarnert 是的,我之前已经为报表做过
  • @sc14sd:那么,你卡在哪里了?正如 Ben 所说,您想对列表中的每个值都做一些事情 for。当然最明显的就是打印TrueFalse很多次,而不是返回一个字符串列表,所以你还必须让anagram返回一些有用的东西,并让你的find_anagrams_in_word_list做一些事情这些返回值,但首先尝试做显而易见的事情。
  • @sc14sd,您的函数不会返回 True 或 False,它只是打印。首先,您需要使其返回适当的值。然后在 for 循环中使用它并为循环中的每个项目调用 anagram(str1,str2)。将匹配项保存在新列表中并返回该列表。

标签: python string list function python-3.3


【解决方案1】:
def anagram(str1,str2):
    str1 = sorted(str1)
    str2 = sorted(str2)
    return str1 == str2 # will be True or False no need for if checks


def find_anagrams_in_word_list(str1,str_list):
    return " ".join([word for word in str_list if anagram(word,str1)]) 

print (find_anagrams_in_word_list("rat", ["art","tar","gar","jay"]))
art tar

if anagram(word,str1) 根据传入的 str1 检查列表中的每个单词或列表,如果 anagram 返回 True 然后我们保留该单词,最后 " ".join 将列表中的所有单词作为单个字符串输出。

【讨论】:

    【解决方案2】:
    def anagram(str1,str2):
       str1 = sorted(str1)
       str2 = sorted(str2)
       if str1 == str2:
          return True
       else:
          return False
    
    print [i for i in str_list if anagram(str,i)]
    

    这里str是要匹配的字符串,str_list是所有字符串的列表

    编辑

    要把它变成一个函数,试试这个:

    def anagram(str1,str_list):
        str1 = sorted(str1)
        temp_list=[i for i in str_list if sorted(i)==str1]
        return temp_list
    

    【讨论】:

    • 为什么不只是return str1 == str2
    • 你是对的。但我尽量让他的代码保持相似,所以他知道问题出在哪里。
    • 问题与第一个代码无关,我不得不以某种方式将其放入 get_anagram_word_list(str,strlist) 以查找列表中的单词是否是 str 的字谜,我已经进一步使用上面的代码,但它仍然不存在@padraiccunningham
    【解决方案3】:
    def anagram(my_str,my_list):
        result_list = []
        for item in my_list:
            if item == my_str:
                result_list.append(item)
        return result_list
    

    然后你必须像这样分配变量并将它们传递给你的函数

    somestr = 's'
    somelist = ['s','not s','m','etc','s']
    my_anagram = anagram(somestr,somelist)
    

    所以你会得到包含匹配元素列表的变量my_anagram

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      相关资源
      最近更新 更多