如果两个单词都包含相同的字母(不考虑顺序),那么它们就是彼此的字谜。例如:‘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 个赞
fwj
(fwj)
2021 年8 月 4 日 06:19
3
貌似楼上的方法更简单,学到了
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
参考题解
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 个赞