#python #list #runtime #bigdata #list-comprehension
#python #Список #время выполнения #bigdata #понимание списка
Вопрос:
У меня есть два списка:
List1 ['i', 'me', 'my', 'myself', 'we']
List2 = ['i am legend', 'its me time', 'my book is red ', 'i told myself', 'we are thinking about we']
Я хочу проверить, сколько раз элемент List1 встречался в List2.
count = 0
occurance = []
for row in range(len(List1 )):
for item in range(len(List2 )):
if List1 [row] in List2 [item]:
count = 1
occurance.append(count)
count = 0
result = list(zip(occurance,List1))
Этот код работает, и результат
[(5, ‘i’), (1, ‘me’), (2, ‘my’), (1, ‘myself’), (1, ‘we’)]
Проблема:
Размер List2 в реальном мире составляет 82 миллиона. Время выполнения велико, и мне нужно его сократить. Я читал статьи, в которых использование полного списка может помочь сократить время выполнения.
Мои вопросы
- Как преобразовать этот код в всеобъемлющий список?
- Вы рекомендуете какой-либо другой метод для сокращения времени выполнения?
Комментарии:
1. Вы уверены, что хотите иметь 5 совпадений для «i»?
2. @antimon Да, это всего лишь пример. Циклы For — главный вопрос
Ответ №1:
Я бы использовал полный словарь, но я не могу заставить его работать полностью. Он хотел бы:
x = {k:[List2.count(l)] for l in List2 for k in List1}
С этого момента действительно легко перейти к списку кортежей.
y = [(k, v) for k, v in x.items()]
Комментарии:
1. В нем нет оператора if