У меня есть проблема, в которой мне нужно найти все анаграммы в файле.
Я знаю, как найти анаграммы, и я использую функцию 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 строками, он становится медленным. Есть ли хороший способ сделать это быстро