首页 > 解决方案 > 读取文件并在其中找到字谜

问题描述

我有一个问题,我需要在一个文件中找到所有的字谜。

我知道如何找到字谜,我正在使用 sorted() 函数来做到这一点。

我的问题是我必须在文件中找到它。文件有 4000 行,每行只有一个单词。

我使用的逻辑是两次使用 2 个文件指针 fp1 和 fp2 打开文件两次。然后我使用嵌套的for循环,对于fp1中的每个单词,我使用排序函数将它与fp2中的每个单词进行比较。我确实得到了输出,但由于它是 4000 个字和两个文件指针,它变得非常慢。

如果我尝试一次读取整个文件并存储在列表中,则脚本会挂起。

有没有更好的方法来做到这一点。任何帮助将不胜感激。

我已经添加了代码:

def isPalindrome(filepo):
 count=0
 for word in filepo:
     word=word.strip()
     if(word==word[::-1]):
         count=count+1
         print (word + " is palindrome")
 print( count)

def isAnagram(fp1,fp2):
   anagramcount=0
   for word in fp1:
     anagramlist=[]
     word=word.strip()
     for secword in fp2:
         secword=secword.strip()
         if(word != secword):
             if(sorted(word)==sorted(secword)):
                 anagramlist.append(secword)
     fp2.close()
     fp2=open("English.txt",'r')
     if(len(anagramlist)>0):
         anagramcount=anagramcount+1
         #print(word+ " is an anagram with possible combinations:")
         #for x in anagramlist:
             #print(x)
 print("Total anagrams are: ",anagramcount)
file1=open("English.txt",'r')
isPalindrome(file1)
file1.close()
file2=open("English.txt",'r')
file3=open("English.txt",'r')
isAnagram(file2,file3)

我可以一次读取文件,但是由于文件很大,有 4000 行,所以它变得很慢。有什么好方法可以让它快速

标签: pythonfile

解决方案


您可以加载字典中的所有单词,该字典键入每个单词的排序字母。然后只保留其中包含多个单词的条目。

anagrams = dict()
for word in wordList:  # list loaded from the file (or read lines directly from file)
    anagrams.setdefault(sorted(word),[]).append(word)
anagrams = [ words for words in anagrams.values() if len(words)>1 ]

推荐阅读