【发布时间】:2017-03-16 14:04:49
【问题描述】:
我想定义一个带有两个字符串的函数,该字符串带有两个参数。如果第一个字符串是第二个字符串的“子字谜”,我希望它返回 true。仅当第一个字符串中的每个字母在第二个字符串中出现的次数至少相同时,该函数才应返回 true。 例如。 key 是键盘的“子字谜”,但鼠标不是。
到目前为止,这是我的代码:
# -*- coding: utf-8 -*-
def anagram(str1,str2):
# string to list
str1 = list(str1.lower())
str2 = list(str2.lower())
#sort list
str1.sort()
str2.sort()
#join list back to string
str1 = ''.join(str1)
str2 = ''.join(str2)
return str1 == str2
print(anagram('trainers', 'strainer'))
到目前为止,如果两个字符串都是精确的字谜,它将返回 true,我不知道如何更改它。
谢谢
【问题讨论】:
-
Python 在标准的
collections模块中有一个非常方便的类Counter:return Counter(str1.lower()) == Counter(str2.lower()) -
这是一个很好的建议,但
==不适用于 OP 的示例(Counter("key")不等于Counter("keyboard")。但这个想法非常好(只需要确保第二个中的计数等于或大于第一个中的计数) -
你说得对,我没有仔细阅读 - 只看到了代码示例...
-
@Rsrichdude098,请记住,如果任何答案解决了您的问题,最好将其标记为已接受(答案左侧的大复选框)。它会给你声誉积分,它会给花时间回答它的人声誉积分,最重要的是,它会帮助未来的读者看到答案是有帮助的。请看一下:meta.stackexchange.com/questions/5234/…(不仅是这篇文章,还有你未来的问题)干杯 :-)