我正在研究生成器,以使我的某些代码更高效。当前想知道如何/应该处理每个创建列表的嵌套循环。嵌套循环为for循环的每个步骤重新生成值列表。这些值是3列馈送数据的向量归一化。从该列表中获取最大值并将其添加到该函数返回的列表中。 似乎可以通过使用生成器来提高效率。但是我不确定如何处理嵌套的for循环,因为该函数将在第一个yield处停止。
当前代码;
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)
这似乎已经更具可读性/效率,但是想知道是否可以/如何替换内部list.append和另一个产量。
答案 0 :(得分:1)
max
不需要序列,它也可以与生成器一起使用,例如:
def define_max_values(data, indexes):
for iter in range(len(indexes)):
data_index_window = data[index[iter] - 5:index[iter] + 50]
yield max(np.linalg.norm(
data_index_window.iloc[i, 0:3].values) \
for i in range(len(data_index_window)))