У меня есть особая проблема, когда я хочу найти множество подстрок в списке многих строк. Ниже приводится суть того, что я пытаюсь сделать:
listStrings = [ACDE, CDDE, BPLL, ... ]
listSubstrings = [ACD, BPI, KLJ, ...]
Вышеприведенные записи являются лишь примерами. len (listStrings) составляет ~ 60 000, len (listSubstrings) составляет ~ 50 000-300 000, а len (listStrings [i]) составляет от 10 до 30 000.
Моя текущая попытка Python:
for i in listSubstrings:
for j in listStrings:
if i in j:
w.write(i+j)
Или что-то в этом роде. Хотя это работает для моей задачи, она ужасно медленна, используя одно ядро и занимая порядка 40 минут, чтобы выполнить задачу. Есть ли способ ускорить это?
Я не верю, что могу сделать dict из listStrings: listSubstrings, потому что есть возможность дублировать записи, которые нужно хранить на обоих концах (хотя я могу попробовать это, если я могу найти способ добавить уникальный тег для каждого, так как dicts намного быстрее). Точно так же я не думаю, что могу предварительно вычислить возможные подстроки. Я даже не знаю, работает ли поиск ключей с ключами быстрее, чем поиск в списке (поскольку dict.get()
будет давать конкретный ввод и не искать суб-входы). Является ли поиск списков в памяти настолько медленным относительно говоря?