Я ищу генераторы, чтобы сделать часть моего кода более эффективной.В настоящее время интересно, как я могу / должен обрабатывать вложенные циклы, каждый из которых создает список.Вложенный цикл повторно генерирует список значений для каждого шага цикла for.Эти значения являются вектором нормализации 3 столбцов передаваемых данных.Из этого списка берется максимальное значение и добавляется в список, который возвращается функцией.Кажется, это можно сделать намного эффективнее, используя генераторы.Однако я не уверен, как обращаться с вложенным циклом for, так как функция остановится на первом выходе.
Код в текущем состоянии;
def define_max_values(data, indexes):
max_values = []
for iter in range(len(indexes)):
data_index_window = data[index[iter] - 5:index[iter] + 50]
for i in range(len(data_index_window)):
sub_list = []
sub_list.append(np.linalg.norm(data_index_window.iloc[i, 0:3].values))
max_values.append(max(sub_list))
return max_values
Я думаю, что это можно превратить в это, используя 1 генератор
def define_max_values(data, indexes):
for iter in range(len(indexes)):
data_index_window = data[index[iter] - 5:index[iter] + 50]
for i in range(len(data_index_window)):
sub_list = []
sub_list.append(np.linalg.norm(data_index_window.iloc[i, 0:3].values))
yield(max(sub_list)
Этот код кажется более читабельным / эффективным уже, но интересно, смогу ли я заменить внутренний список?.append с другой доходностью.