读取文件并在其中找到字谜

时间:2019-05-14 02:38:59

标签: python file

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

我知道如何找到字谜,我正在使用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行,因此速度变慢。有什么好方法可以使其快速

2 个答案:

答案 0 :(得分:1)

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

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 ]

答案 1 :(得分:0)

使用枚举;遍历文件。 列出两个清单。   一句话。   一个用于(sortedword,index)元组; 对元组列表进行排序; 在元组列表上使用itertools.groupby获取字谜的索引; 在单词表上使用这些

或在遍历文件时创建字典。使用排序的单词作为键,并使用每个值的列表,然后将每个单词附加到其键的值上。