Проблема с поиском дубликатов

microproger

Новичок
Пользователь
Авг 18, 2021
1
0
1
Win10, Python 3.9.6
Здраствуйте, хочу чтобы код выводил дубликаты по тексту (например рандомный набор символов, который повторяется 2 и более раз), с маленьким количеством символов работает нормально, с большим (64 и более) отказывается. Что делать? Пробный файл прикрепляю

1629275731393.png

Python:
input_file = 'probny.txt'
output_file = 'duplicates.txt'

def read_lines(input_file):
    with open(input_file, 'r') as file:
        return file.read().splitlines()

def line_comb(st):
    res = set()
    n = len(st)

    for i in range(n):
        for j in range(i, n):
            res.add(st[i: j+1])

    return res

lines = read_lines(input_file)
result = line_comb(lines[0])

for i in range(1, len(lines)):
    result &= line_comb(lines[i])

with open(output_file, 'w') as file:
    for w in sorted(list(result), key=len, reverse=True):
        print(w)
        file.write(w+'\n')
 

Вложения

  • probny.txt
    1,3 КБ · Просмотры: 5

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Тут прикол в том, что &= возвращает пересечение множеств, и если множества 2-х строк не пересекаются возвращается пустой set
Тут скорее надо использовать

result |= result & line_comb(lines)

из минусов, поскольку находятся все дубликаты, из вашего файла получился файл на 13000+ строк

например сравнение 'abcde' и 'abcdf' выльется в:
abcde
bcde
abcd
cde
bcd
abc
ab
bc
cd
de
e
b
c
d
a
 

Форум IT Специалистов