【发布时间】:2020-02-12 05:56:57
【问题描述】:
testing if strings are anagrams 有多种方式。但是,我想知道是否有一种方法可以只对每个单词进行一次迭代?如果不是,在 Python 中最有效的方法是什么?
我们可以遍历第二个字符串,检查每个字符是否存在于第一个字符串中。然而,当使用内置的 __contains__() 方法(调用__iter__() 方法)时,这给了我们在最坏的情况下(reversgram)对第一个字符串进行 n-1 次迭代。
def is_anagram(str_1, str_2):
#chceck if same length
if (len(str_1) != len(str_2)):
return False
else:
#lowercase all characters
str1, str2 = list(str_1.lower()),list(str_2.lower())
for letter in str1:
if letter not in str2:
return False
str2.remove(letter)
return True
还有其他方法吗?
【问题讨论】:
-
为什么不对您链接的问题中的方法进行基准测试?我的钱花在了使用
Counters 的方法上
标签: python python-3.x string iteration