Как реализовать диктанты / наборы, противоположные поиску по списку, чтобы увеличить скорость - PullRequest
0 голосов
/ 17 октября 2019

Я создаю программу, которая должна выполнять поиск по очень длинным спискам, и я видел людей, предлагающих, что использование наборов и диктов значительно ускоряет ее. Тем не менее, я в растерянности относительно того, как заставить это работать в моем коде. В настоящее время программа делает это:

indexes = []

print("Collecting indexes...")
for term in sliced_5:
    indexes.append(hex_crypted.index(term))

Код просматривает список hex_crypted, который содержит более 1 000 000 терминов, находит индекс термина и затем добавляет его в список «индексы».

Мне просто нужно ускорить этот процесс. Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Первый шаг - сгенерировать dict, например:

hex_crypted_dict = {v: i for i, v in enumerate(hex_crypted)}

Затем ваш код изменился на

indexes = []
hex_crypted_dict = {v: i for i, v in enumerate(hex_crypted)}

print("Collecting indexes...")
for term in sliced_5:
    indexes.append(hex_crypted_dict[term])
0 голосов
/ 17 октября 2019

Вы хотите построить таблицу поиска, чтобы вам не нужно было многократно повторять циклы по hex_crypted. Тогда вы можете просто посмотреть каждый термин в таблице.

print("Collecting indexes...")
lookup = {term: index for (index, term) in enumerate(hex_crypted)}
indexes = [lookup[term] for term in sliced_5]  
0 голосов
/ 17 октября 2019

Самый быстрый способ, если у вас есть список, это сделать функцию набора в списке, чтобы вернуть его как набор, но я не думаю, что это то, что вы хотите сделать в этом случае.

hex_crypted_set = set(hex_crypted)

Если вам по какой-то причине необходимо сохранить этот индекс, вместо этого сначала нужно создать словарь.

hex_crypted_dict = {}
for i in enumerate(hex_crypted):
    hex_crypted_dict[i[1]] = i[0]

А затем, чтобы получить этот индекс, просто выполните поиск по диктовке:

indexes = []
for term in sliced_5:
    indexes.append(hex_crypted_dict[term])

В итоге вы получите соответствующие индексы, которые соответствуют исходному длинному списку, и повторяете этот длинный список только один раз, что будет намного лучше, чем итерация при каждом поиске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...