Медленное попарное сравнение

У меня есть код, который открывает два файла, сохраняет их содержимое в наборы (set1 и set2) и сохраняет результаты парного сравнения этих наборов в выходной файл. Оба файла действительно большие (более 100 тыс. Строк в каждом), и на вывод этого кода уходит много времени (более 10 часов).

Есть ли способ оптимизировать его производительность?

def matches2smiles():
    with open('file1.txt') as f:
    set1 = {a.rstrip('\n') for a in f}

    with open('file2.txt') as g:
        set2 = {b.replace('\n', '') for b in g}

    with open('output.txt', 'w') as h: 
        r = [                                                                    
            h.write(b + '\n')
            for a in set1
            for b in set2
            if a in b
            ]

matches2smiles()

1 ответ

Ваш код в первую очередь фальшивый, он должен быть:

    r = [                                                                    
        h.write(a + '\n')
        for a in set1
        if a in set2
        ]

Во всяком случае, используйте set1.intersection(set2) - это, вероятно, будет быстрее и яснее код.

Другие вопросы по тегам