Ускорить обработку списка в Python
У меня есть задача по обработке большого списка, ниже приведу идею работы моей программы.
Кто может подсказать, каким инструментом ускорить работу?
main_list = [a_0, a_1, a_2, .... a_n] # Это список, который содержит в себе около 8000 переменных float
main_list.append(a_new) # Добавляю новую переменную в список, добавление идет циклом
my_funct(min(main_list), max(main_list)) # Отправляю максимальное и минимальное значение в другию функцию
del (main_list[0]) # Удаляю 0-й элемент из списка
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
- определение
min,maxпри последовательном добавлении элементов в список для каждого добавления должно исключать просмотр элементов списка
например так:
min_value, max_value = min(main_list), max(main_list)
while True:
main_list.append(a_new)
min_value = min(a_new, min_value)
max_value = max(a_new, max_value)
- удаление 0-го элемента - тут надо смотреть как вообще в питоне устроен список (например в c++ для такой цели вместо
vectorлучше использоватьlist)
в питоне наверное быстрее среза ничего нет (но не уверен)
main_list = main_list[1:]
Автор решения: Эникейщик
→ Ссылка
Каждый раз список из 8000 элементов дважды анализируется - один раз для поиска максимума, второй раз для поиска минимума. При добавлении следующего элемента имеющиеся 8000 анализируются заново, хотя ничего нового там нет. Достаточно каждый новый элемент сравнивать с известными максимумом и минимумом и тем самым избежать 16000 сравнений. Примерно так
main_list = [a_0, a_1, a_2, .... a_n] # Это список, который содержит в себе около 8000 переменных float
minimum = min(main_list)
maximum = max(main_list)
main_list.append(a_new) # Добавляю новую переменную в список, добавление идет циклом
if a_new > maximum:
maximum = a_new
if a_new < minimum:
minimum = a_new
my_funct(minimum, maximum) # Отправляю максимальное и минимальное значение в другию функцию
del (main_list[0])
Да и вместо удаления первого элемента возможно дешевле брать срез
main_list = main_list[1:]