Эффективный питон для цикла с использованием текстовых файлов

1

Итак, я работаю над проектом python (я новичок), но мне трудно сравнивать список со словами в текстовом файле. Это для программы, которая должна расшифровывать слова.

your_chars = input("Input characters:")
complete_list = []
final_lst = []
for current in range(len(your_chars)):
    a = [i for i in your_chars]
    for y in range(current):
        a = [x + i for i in your_chars for x in a]
    complete_list = complete_list+a
with open("P:/words.txt", "r") as file:
    for i in complete_list
        for x in file:
            final_lst.append(x)
print(final_lst)

Я думаю, что он должен работать, но, очевидно, он не очень эффективен (особенно последние три строки), но я не могу придумать другого способа его написать.

Пример:

input: yhe

выход: hey

Какие-нибудь советы?

  • 0
    Что именно здесь делает complete_list ? Похоже, вы повторяете строки большое количество раз.
  • 0
    Вы дважды просматриваете текстовый файл и никогда не закрываете входной файл. Попробуйте with open(..) as file и for line in file .
Показать ещё 3 комментария
Теги:
performance
for-loop

1 ответ

0
Лучший ответ

Здесь решение, которое может обрабатывать ввод текста со словами произвольной длины:

from collections import Counter

your_text = input('input characters')
with open('P:/words.txt', 'r') as infile:
    file_text = infile.read()

old_words = {
    str(sorted(Counter(w).items())): w
    for w in file_text.split()
}

for w in your_text.split():
    i = str(sorted(Counter(w).items()))
    if i in old_words:
        print(old_words[i])

Нет необходимости проверять каждую перестановку входных символов; он совпадает, когда количество букв во входном слове совпадает с количеством букв во входном файле.


Это было мое первое решение и работает, но не вводите строку со словом длиной более 10 символов или это приведет к сбою вашего компьютера:

from itertools import permutations

perms_list = []
perms = []
matches = []
your_chars = input("input characters")
your_words = your_chars.split()

for word in your_words:
    perms_list.append([i for i in permutations(word)])
for word in perms_list:
    for perm in word:
        perms.append(''.join(list(perm)))

with open('P:/words.txt', 'r') as comparefile:
    file_contents = comparefile.read().split()
for permutation in perms:
    if permutation in file_contents:
        matches.append(permutation)
print(matches)
  • 0
    проблема, которую я имел, сравнивает содержимое строки complete_list с файлом words.txt . Если слово встречается в обоих, они будут добавлены в final_list , который будет final_list на консоль.
  • 0
    если P:/words.txt действительно большой, это может быть не самый эффективный способ сделать это.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню