我目前正在学习一个“列表”单元,在其中一个练习中,我们需要创建一个anagram(对于那些不知道的人;两个单词是一个anagram,如果你可以重新排列其中一个字母来拼写另一个)。你知道吗
想到的更简单的解决方案是:
def is_anagram(a, b):
return sorted(a) == sorted(b)
print is_anagram('god', 'dog')
这很管用,但我并不满意。例如,如果我们处于这种情况:
def is_anagram(a, b):
return sorted(a) == sorted(b)
print is_anagram('god', 'dyog') #extra letter 'd' in second argument
>>> False
Return为False,尽管我们应该能够用'dyog'
构建单词'god'
。也许这个游戏/问题不叫字谜,但我一直在努力想办法解决。你知道吗
从技术上讲,我的解决方案是:
1-遍历b的每个元素。
2-我会检查a中是否存在该元素。
3-如果他们都这样做,那么我们就可以从b中创建a。
否则,我们不能
我只是没办法让它发挥作用。我不知道如何使用lambda
一些测试:
print is_anagram('god', 'ddog') #should return True
print is_anagram('god', '9d8s0og') #should return True
print is_anagram('god', '_@10d_o g') #should return True
谢谢:)
不比另一种解决方案好。但如果你喜欢冗长的代码,这是我的。你知道吗
如果您需要检查
a
单词是否可以从b
创建,您可以这样做更新(解释)
b_list = list(b)
生成list
个str
对象(字符)。你知道吗答案基本上是这样的:我们检查
a
中列在b_list
中的每个字符,当出现时,我们从b_list
中删除该字符(我们这样做是为了消除用输入'good'
,'god'
返回True
的可能性)。因此,如果在b_list
的其余部分中没有出现另一个a
字符,那么它就不是高级的anagram。你知道吗由于其他答案在撰写本文时不支持颠倒顺序:
为了方便起见,包含type hints,因为为什么不呢?你知道吗
如果将来您确实学会了使用
lambda
,那么等效的用法是:相关问题 更多 >
编程相关推荐