在python中查找字符串的字谜

在python中查找字符串的字谜,python,string,Python,String,我为字谜写了代码,但它没有给出一些测试用例的结果 import itertools def find_all_anagrams(words, word): if word is None: return [] else: m = set() for permutation in itertools.permutations(word.lower()): m.ad

我为字谜写了代码,但它没有给出一些测试用例的结果

import itertools
def find_all_anagrams(words, word):
        if word is None:
            return []
        else:
            m = set()
            for permutation in itertools.permutations(word.lower()):
                m.add("".join(permutation))
            ls = []
            for anagram in m:
                ls.append(anagram)
            n = [i for i in words if i in ls]
            return n
        pass

assert ["not", "ton"] == find_all_anagrams(["ant", "not", "ton"], "ont")
assert ["ant", "tan"] == find_all_anagrams(["ant", "not", "ton", "tan"], "tan")
assert [] == find_all_anagrams(["ant", "not", "ton", "tan"], "abc")
assert [] == find_all_anagrams(["ant", "not", "ton", "tan"], None)
assert [] == find_all_anagrams(None, None)
assert ["ant", "tan"] == find_all_anagrams(["ant", "not", "ton", "tan"], "TAN")
但是对于这个测试用例,它给出了一个空列表

assert ["Ant", "Tan"] == find_all_anagrams(["Ant", "not", "ton", "Tan"], "TAN")

检查我的代码

这是一个字母大小写问题;如果您将所有
单词
改为小写,则它可以工作:

>>> find_all_anagrams(["ant", "not", "ton", "tan"], "TAN")
['ant', 'tan']
您可以按如下方式对函数进行最低限度的修改:

return [i for i in words if i.lower() in ls]
(注意无需分配给
n
)。现在,它给出了您期望的输出:

>>> find_all_anagrams(["Ant", "not", "ton", "Tan"], "TAN")
['Ant', 'Tan']