我正在尝试找出如何将字符串(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
不确定这是否是我的意思,因为我还是初学者,所以任何指针都会非常有用!
感谢。
答案 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']