将字符串与字符串列表进行比较以在Python中查找字谜

时间:2014-11-21 12:33:49

标签: python string function

我正在尝试找出如何将字符串(str1)与字符串列表(str_list)进行比较,然后返回str_list中所有字符串的列表,这些字符串是str1的字谜。

我之前已经定义了一个比较两个字符串的函数,如果它们是彼此的字谜,则打印为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

不确定这是否是我的意思,因为我还是初学者,所以任何指针都会非常有用!

感谢。

2 个答案:

答案 0 :(得分: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 :(得分: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']