【每日一题0804】字谜游戏

:woman_mage:如果两个单词都包含相同的字母(不考虑顺序),那么它们就是彼此的字谜。例如:‘abba’ 和 'baab’就是彼此的字谜。

请编写一个python函数,接收一个目标单词和一个包含单词列表,请找出列表中跟目标单词是字谜关系的单词并返回。

示例:
输入:‘abba’, [‘aabb’, ‘abcd’, ‘bbaa’, ‘dada’]
输出:[‘aabb’, ‘bbaa’]

题目难度:中等
题目来源:codewars

def anagrams(word, words):
    pass
    
assert anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) == ['aabb', 'bbaa']
assert anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) == ['carer', 'racer']
assert anagrams('laser', ['lazing', 'lazy',  'lacer']) == []
def anagrams(word, words):
    word = sorted(word)
    res = []
    for i in words:
        if sorted(i) == word:
            res.append(i)
    return res


assert anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) == ['aabb', 'bbaa']
assert anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) == ['carer', 'racer']
assert anagrams('laser', ['lazing', 'lazy', 'lacer']) == []
1 个赞

貌似楼上的方法更简单,学到了

def anagrams(word:str,words:list):
    res=[]
    for i in words:
        num=0
        for j in i:
            if j in word:
                if i.count(j)==word.count(j):
                    num=num+1
        if num==len(i):
            res.append(i)
    return res

image

参考题解

def anagrams(word, words):
    return [item for item in words if sorted(item)==sorted(word)]


assert anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) == ['aabb', 'bbaa']
assert anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) == ['carer', 'racer']
assert anagrams('laser', ['lazing', 'lazy', 'lacer']) == []

解题思路:利用列表推导式,根据题目的约束条件进行过滤,最后提取出符合条件的结果。
1 个赞