Python: объединение строк в списке друг с другом - PullRequest
0 голосов
/ 20 июня 2020

У меня есть текстовый файл из 1000 слов в каждой отдельной строке, и я хочу создать текстовый файл «фраз», объединив каждое из этих слов вместе без пробелов между ними, до фраз из четырех максимум слов и без повторяющихся слов.

Например:

Ввод (каждый элемент представляет собой строку в текстовом файле):

["good", "morning", "america"]

Вывод (тот же формат, что и ввод):

["good", "morning", "america", "goodmorning", "morninggood", "goodamerica", "americagood", "morningamerica", "americamorning", "goodmorningamerica", "goodamericamorning", "morninggoodamerica", "morningamericagood", "americagoodmorning", "americamorninggood"]

Я немного новичок в Python, поэтому моим первым побуждением было открыть файл с помощью open (, r), использовать .readlines () чтобы поместить его в список, запустите четыре вложенных цикла (каждый по 1000 запусков) и объедините их все вместе в новый список, а затем запишите этот список в файл построчно, используя open (, w) и еще один для l oop. Но меня беспокоит выполнимость и затраты времени на такое количество циклов for.

Есть ли способ оптимизировать эту операцию, чтобы реализовать ее лучше или ускорить ее выполнение? Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Попробуйте это (записывает вывод в файл):

from itertools import permutations 
MAX_LEN = 4
def get_sets(items): 
    for i in range(0,len(items)+1): 
        for element in permutations(items,i): 
            if len(element) <= MAX_LEN:
                yield (''.join(element)) 

items=['a','b','c', 'd', 'e']
with open('out.txt', 'w') as fh:
    for elem in get_sets(items):
        fh.write(elem)
0 голосов
/ 20 июня 2020
from itertools import permutations
words=["a","b","c","d"]

result=[]
for i in range(1,5):
    result.extend(list(permutations(words,i)))


phrases=[]
for e in result:
    phrases.append("".join(e))
...