创建一个字谜函数

时间:2019-03-06 05:33:23

标签: python

在试图弄清楚两个小时左右之前,似乎无法弄清楚如何在不使用sorted()的情况下创建字谜函数。尝试不使用splice,.find()、. count()、. replace()和sorted()来解决问题。 目前我有哪些有效的方法:

def anagram(anag1, anag2):
    if (sorted(anag1) == sorted(anag2)):
        return True
    else:
        return False

如果有人有办法不加排序就好了。

5 个答案:

答案 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)

制作一个字典,列出每个元素的编号,然后比较两者中的编号相同。