Эффективно находите совпадающую строку среди подстрок в больших списках.Python

Программы на Python
Anonymous
Эффективно находите совпадающую строку среди подстрок в больших списках.

Сообщение Anonymous »

У меня есть два списка, каждый из которых содержит около 5 миллионов элементов. List_1 — это список кортежей, по две строки в каждом кортеже. List_2 — длинный список строк.
Я пытаюсь найти составную строку, состоящую из этих кортежей, в List_2.Итак, если кортеж из List_1 равен ("foo", "bar"), а List_2 содержит ["flub", "blob", "barstool" , "foo & bar: злоключения в python"], я бы попытался получить "foo & bar: злоключения в python" из List_2.
В настоящее время я делаю это путем перебора List_1 и понимания для сканирования List_2. Несмотря на то, что поиск в List_2 выполняется быстро, его выполнение занимает около секунды, для этого потребуется перебрать весь List_1, и, следовательно, для его поиска требуется слишком много времени (большая часть 1000 часов). Complete, что заставило меня задуматься, существует ли более быстрый и эффективный способ сделать то же самое.
Пример кода:

Код: Выделить всё

list_1 = [] #Insert List
list_2 = [] #Insert List

for search_term in list_1:
compound_string = "{search_first} & {search_second}".format(search_first=search_term[0], search_second=search_term[1])
result = next((s for s in list_2 if compound_string in s), None) #Short-circuit, so we don't need to search through the whole list
if result:
#do exciting things
Я рассматривал возможность использования множества и пересечения для выполнения сравнения, однако использование множества пересечений для сравнения работает только с целыми строками. Поскольку я не знаю всю строку заранее, использование этого метода кажется невозможным без использования цикла for и списков, что может привести к той же проблеме.


Подробнее здесь: https://stackoverflow.com/questions/787 ... arge-lists

Вернуться в «Python»