在试图弄清楚两个小时左右之前,似乎无法弄清楚如何在不使用sorted()的情况下创建字谜函数。尝试不使用splice,.find()、. count()、. replace()和sorted()来解决问题。 目前我有哪些有效的方法:
def anagram(anag1, anag2):
if (sorted(anag1) == sorted(anag2)):
return True
else:
return False
如果有人有办法不加排序就好了。
答案 0 :(得分:2)
使用Counter
:
from collections import Counter
def anagram(str_1, str_2):
return Counter(str_1) == Counter(str_2)
答案 1 :(得分:0)
尝试在生成器内部使用all
来检查相等性:
def anagram(anag1, anag2):
if all(len([i for a in anag1 if a == i]) == len([i for b in anag2 if b == i]) for x in zip(anag1,anag2) for i in x):
return True
else:
return False
print(anagram('car','arc'))
输出:
True
答案 2 :(得分:0)
我更喜欢sorted
方法和collections.Counter
方法,但是如果您正在寻找替代方法,则可以使用re.findall
来确定是否使用第一个单词在第二个单词中的出现频率相同。
例如:
import re
def is_anagram(a, b):
return all(re.findall(c, a) == re.findall(c, b) for c in a)
print(is_anagram('cinema', 'iceman'))
#True
答案 3 :(得分:0)
在每个输入字符串使用计数器生成字典之后,如果没有任何区别,我们可以比较那些字典,否则是七字谜。
from collections import Counter
def anagram(ang1,ang2):
count_list1 = Counter(ang1)
count_dict1 = dict(count_list1)
count_list2 = Counter(ang2)
count_dict2 = dict(count_list2)
dict_compare_length = len(count_dict1.items() - count_dict2.items())
if dict_compare_length==0:
return True
else:
return False
print(anagram('listen','silen'))
答案 4 :(得分:0)
我假设您想看到一个没有任何花哨的集合或功能的解决方案。只是原始数据类型,循环和条件。所以,怎么样...
def count(word):
map = {}
for e in word:
if e not in map:
map[e] = 0
map[e] += 1
return map
def anagram(a, b):
c1 = count(a)
c2 = count(b)
return all(c1[k] == c2[k] for k in c1)
制作一个字典,列出每个元素的编号,然后比较两者中的编号相同。