我已经编写了这个函数,它接受字符串以查看它们是否是字谜:
def anagram_check(str_x, str_y):
x = string1.replace(" ","")
y = string2.replace(" ","")
lower1 = x.lower()
lower2 = y.lower()
sorted1 = sorted(lower1)
sorted2 = sorted(lower2)
if sorted1 == sorted2:
return True
else:
return False
这个函数工作正常,问题是现在我需要在另一个函数中使用这个函数才能在文本文件中找到字谜。我想打印一个包含所有字谜的元组列表。这就是我到目前为止所做的事情
def anagrams_finder(words_num):
anagrams = []
f = open("words.txt")
a = list(f)
list1 = ([s.replace('\n', '') for s in a])
list2 = ([i.lower() for i in list1])
list3 = list2[0:words_num] #number of words from text that need to be checked.
for i in list3:
...
我尝试使用for循环,while循环,appand ....但似乎没有任何工作。我怎样才能使用第一个函数来帮助我第二个? 请帮忙......
答案 0 :(得分:5)
正如您所说,您的anagram_check()
功能正常运行。但是,对于这个问题,一个更有用的功能是将给定的单词转换为“规范”形式,这样两个字谜将具有相同的规范形式。
一个这样的功能是:
def canonical(word):
return ''.join(sorted(word.lower()))
现在你要做的就是拥有一个字典,将规范表单映射到相应单词列表。您可以通过文本文件一次填充此字典。从字典中生成所需的元组列表是微不足道的。
由于这是作业,我留下剩下的细节供你弄清楚。
答案 1 :(得分:0)
yupp,来到这里和aix说同样的话:
在大块文本中调用所有可能的单词对的anagram检查函数需要很长时间,因此你需要一个不错的哈希函数来查找字谜。
anagram-finder散列函数将具有两个属性:
aix提出的散列函数(即对单词中的字母进行排序)绝对足以找到字谜,我也在相对较大的文本块(如书的大小)上使用此函数用于相同的目的,它工作得很快。