代码之家  ›  专栏  ›  技术社区  ›  Chrisvdberge

如何嵌套生成器

  •  0
  • Chrisvdberge  · 技术社区  · 7 年前

    我正在研究生成器,以使我的一些代码更高效。目前正在考虑如何处理嵌套for循环,每个循环创建一个列表。嵌套循环为for循环的每个步骤重新生成一个值列表。这些值是fed数据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
    

    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。

    1 回复  |  直到 7 年前
        1
  •  1
  •   khachik    7 年前

    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)))