python - 基本 Anagram VS 更高级的 Anagram

标签 python python-2.7 python-3.x

我目前正在学习“列表”单元,在其中一个练习中,我们需要创建一个字谜词(对于那些不知道的人;如果您可以重新排列两个单词,那么它们就是一个字谜词)一个字母拼写另一个字母)。

我想到的更简单的解决方案是:

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

返回值为 False,尽管我们应该能够从 'dyog' 构建单词 'god'。也许这个游戏/问题不叫字谜,但无论如何我一直在试图弄清楚它。

从技术上讲,我的解决方案是:
1- 迭代 b 的每个元素。
2-正如我所做的那样,我检查该元素是否存在于 a.
3- 如果他们都这样做;然后我们可以从 b 中创建一个。
4-否则,我们不能。

我似乎无法让它发挥作用。 郑重声明,我不知道如何使用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

谢谢:)

最佳答案

由于在撰写本文时其他答案不支持颠倒顺序:

包含type hints为了方便,为什么不呢?

# Just strip hints out if you're in Python < 3.5.
def is_anagram(a: str, b: str) -> bool:
    long, short = (a, b) if len(a) > len(b) else (b, a)
    cut = [x for x in long if x in short]
    return sorted(cut) == sorted(short)

如果将来您确实学习使用 lambda,则等效项是:

# Again, strip hints out if you're in Python < 3.5.
def is_anagram(a: str, b: str) -> bool:
    long, short = (a, b) if len(a) > len(b) else (b, a)
    # Parentheses around lambda are not necessary, but may help readability
    cut = filter((lambda x: x in short), long)
    return sorted(cut) == sorted(short)

关于python - 基本 Anagram VS 更高级的 Anagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39797552/

相关文章:

Python Multiprocessing - 进程数

python - 在 python 文件之间共享代码

python - 大数模矩阵求逆

python - 随机排列列表中元素的位置

python-2.7 - 在pygame中让多个球移动

python - 对话框中的用户输入

python - 没有重叠词的句子的 Fuzzywuzzy 分数高于有重叠词的句子?

python - 不可能创建具有特定游戏的环境(健身房复古)

python - 将全角 Unicode 字符转换为 ASCII 字符

python - 编写一个返回反转数字的函数