如何编写一个函数来判断两个字符串是否是Python中的字谜?

如何编写一个函数来判断两个字符串是否是Python中的字谜?,python,anagram,Python,Anagram,这个函数的输入是两个字符串,目的是判断这两个字符串是否是字谜。例如,“qwerty”和“qetyrw”是字谜,这意味着重新排列第一个字符串中的字符可以得到第二个字符串,不区分大小写。“qwerty”和“qwerty”也是字谜。我只是对我的函数感到困惑,它什么也不返回 我的职能如下: def is_anagram(string_a,string_b): """returns True if the strings are anagrams of each other str, l

这个函数的输入是两个字符串,目的是判断这两个字符串是否是字谜。例如,“qwerty”和“qetyrw”是字谜,这意味着重新排列第一个字符串中的字符可以得到第二个字符串,不区分大小写。“qwerty”和“qwerty”也是字谜。我只是对我的函数感到困惑,它什么也不返回

我的职能如下:

def is_anagram(string_a,string_b):
    """returns True if the strings are anagrams of each other

    str, list -> boolean"""
    new_a=string_a.lower()
    new_b=string_b.lower()
    i=0
    if len(string_a)!=len(string_b):
        return False
    else:
        while i<=len(new_a)-1:
            if new_a[i] in new_b:
                list(new_b).remove(new_a[i])
            i=i+1
            break
        if len(list(new_b))==0:
            return True
        else:
            return False
def是字符(字符串a、字符串b):
“”如果字符串是彼此的字谜,则返回True
str,list->boolean”“”
new_a=字符串_a.lower()
new_b=string_b.lower()
i=0
如果len(string_a)=len(字符串_b):
返回错误
其他:

当i时,您只需对字符串进行排序:

def is_anagram(string_a, string_b):
    return sorted(string_a.lower()) == sorted(string_b.lower())
您可以使用该类:


排序以确定一个字符串是否是另一个字符串的字谜,需要
O(n logn)
时间。相反,我们可以使用计数器对象统计每个字母的出现次数:

from collections import Counter

def is_anagram(string_a, string_b):
    return Counter(string_a.lower()) == Counter(string_b.lower())
这将花费平均线性时间。基本观察结果是,两个字谜字符串具有完全相同的字母频率

示例:

>>> is_anagram("abc", "aaa")
False
>>> is_anagram("abc", "aac")
False
>>> is_anagram("abc", "acb")
True
您的代码被“list(new_b)”弄错了,它没有被存储,所以每次它都会被视为一个新的列表

while循环中的“中断”也是不必要的

请尝试以下代码:

def is_anagram(string_a,string_b):
    """returns True if the strings are anagrams of each other

    str, list -> boolean"""
    new_a=string_a.lower()
    new_b=string_b.lower()
    i=0
    if len(string_a)!=len(string_b):
        return False
    else:
        list_b = list(new_b) # store the list(new_b) into list_b
        while i<=len(new_a)-1:
            if new_a[i] in list_b:
                list_b.remove(new_a[i])
            i=i+1
           #break should be removed! 
        if len(list_b)==0:
            return True
        else:
            return False
def是字符(字符串a、字符串b):
“”如果字符串是彼此的字谜,则返回True
str,list->boolean”“”
new_a=字符串_a.lower()
new_b=string_b.lower()
i=0
如果len(string_a)=len(字符串_b):
返回错误
其他:
list_b=list(new_b)#将列表(new_b)存储到list_b中
而我
def is_anagram(string_a,string_b):
    """returns True if the strings are anagrams of each other

    str, list -> boolean"""
    new_a=string_a.lower()
    new_b=string_b.lower()
    i=0
    if len(string_a)!=len(string_b):
        return False
    else:
        list_b = list(new_b) # store the list(new_b) into list_b
        while i<=len(new_a)-1:
            if new_a[i] in list_b:
                list_b.remove(new_a[i])
            i=i+1
           #break should be removed! 
        if len(list_b)==0:
            return True
        else:
            return False