2014-11-21 103 views
0

我正在尝试如何比较字符串(str1)与字符串列表(str_list),然后返回str_list中所有字符串的列表那是str1的变形。将字符串与字符串列表进行比较以在Python中查找字符串

我以前定义过一个函数来比较两个字符串,如果它们是对方的字典,则输出True,否则输出False。

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

我试图开始定义下一个函数,但我努力返回字符串的列表。

def find_anagrams_in_word_list(str1, str_list): 
    str_list = [] #assumed an empty list has to be made first 
    str_list = input 
    if sorted(str1) in sorted(str_list): 
      #return strings that are anagrams 

不知道这是我的意思是如何做到这一点,因为我还是个初学者,所以任何指针将是非常有益的!

谢谢。

+0

只是一个方面说明..但写的东西一样,如果X:打印(真)其他:打印(假)是exacly一样打印(X)。在你的情况只写print(sorted(str1)== sorted(str2)) – Enermis 2014-11-21 12:44:57

回答

2

更快的方式做,这是使用collections.Counter

from collections import Counter 
def isAnagram(str1, str2): 
    return Counter(str1) == Counter(str2) 

def find_anagrams_in_word_list(str1, str_list): 
    return [word for word in str_list if isAnagram(str1, word)] 

请注意,您的isAnagram不会像您期望的那样行事,因为您只有print的值,您不需要return它。为了您能够使用您的isAnagram函数,例如我在上面的列表理解中所做的那样,您必须执行以下操作之一。

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

或者更简洁

def anagram(str1,str2): 
    return sorted(str1) == sorted(str2): 
1

您可以使用发电机的是,还要注意的是sorted函数的结果是一个列表,你需要将它与''.join()转换为字符串,然后比较:

def find_anagrams_in_word_list(str1, str_list): 
    return [ i for i in str_list if ''.join(sorted(str1)) == ''.join(sorted(i))] 

演示:

>>> l =['abcd', 'msnd'] 
>>> find_anagrams_in_word_list('cba',l) 
['abcd'] 
+1

我不明白你想要做什么。您将输入列表设置为空因为某种原因,然后将其设置为函数,然后尝试对其进行迭代。 '''.join(sorted(i))'中的'''.join(sorted(str1))'无论如何不是一个有效的anagram测试,因为''abc''在abcd'中,但它们不是字谜。 – DSM 2014-11-21 12:44:50

+0

是的,那个命令必须超出功能! – Kasramvd 2014-11-21 12:46:50

+0

这不会产生正确的结果。正如@DSM所说,它将包含原始单词的子字符串,这些字符串不是有效字符串。 – CoryKramer 2014-11-21 12:47:36

相关问题