如何编写一个函数来判断两个字符串是否是Python中的字谜?
这个函数的输入是两个字符串,目的是判断这两个字符串是否是字谜。例如,“qwerty”和“qetyrw”是字谜,这意味着重新排列第一个字符串中的字符可以得到第二个字符串,不区分大小写。“qwerty”和“qwerty”也是字谜。我只是对我的函数感到困惑,它什么也不返回 我的职能如下:如何编写一个函数来判断两个字符串是否是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
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