Как бы я нашел пересечение двух списков в Python без использования множеств - PullRequest
0 голосов
/ 04 июля 2019

У меня есть программа с двумя очень большими списками, один с 3 ^ 12 терминами, а другой с 5000 терминами, и я хочу найти их пересечение (элементы, которые одинаковы в обоих списках).

Я уже пробовал использовать наборы и циклы (см. Ниже).

Я пытался (в Python 3)

[i for i in joinedCombs if i in dictionary]

и

endResult = list(set(joinedCombs)&set(dictionary))

Я получаю ошибку времени для первой строки кода и ошибку памяти для второй строки кода. Что я могу сделать, чтобы сбалансировать скорость и время? Пожалуйста, оставьте ответ, а не комментарий

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Используйте len, чтобы определить, какой список является более коротким, и создать набор из этого:

[i for i in joinedCombs if i in dictionary]
if len(joinedCombs) < len(dictionary):
    s1 = set(dictionary)
    itr = joinedCombs
else:
    s1 = set(joinedCombs)
    itr = dictionary

new = [i for i in itr if i in s1]
0 голосов
/ 05 июля 2019

Вы можете попробовать эту строку кода:

endResult = list(set(joinedCombs).intersection(dictionary))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...