Прочитайте файл и найдите в нем анаграммы - PullRequest
0 голосов
/ 14 мая 2019

У меня есть проблема, в которой мне нужно найти все анаграммы в файле.

Я знаю, как найти анаграммы, и я использую функцию 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 ]

1 голос
/ 14 мая 2019

Вы можете загрузить все слова в словаре, набирая их по отсортированным буквам каждого слова.Тогда оставляйте только записи, содержащие более одного слова.

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 ]
0 голосов
/ 14 мая 2019

Перебрать файл, используя перечисление ;.составить два списка.один для слов.один для (sortedword, индекс) кортежей ;.сортировать список кортежей ;.используйте itertools.groupby в списке кортежей, чтобы получить индексы анаграмм ;.используйте их в списке слов

Или создайте словарь, перебирая файл.Используйте отсортированное слово для ключей и список для каждого значения, добавляя каждое слово к значению его ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...