我有一个问题,我需要在文件中查找所有字谜。
我知道如何找到字谜,我正在使用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行,因此速度变慢。有什么好方法可以使其快速
答案 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获取字谜的索引; 在单词表上使用这些
或在遍历文件时创建字典。使用排序的单词作为键,并使用每个值的列表,然后将每个单词附加到其键的值上。