code: def compute_savings_list(self, graph):
          
  
          savings_list = {}
  
          for i, j in graph.edges():
              # t = (i, j)
              if repr(i) < repr(j):
                  t = (i, j)
              else:
                  t = (j, i)
  
              if i == graph.depot() or j == graph.depot():
                  continue
  
              savings_list[t] = graph.distance(graph.depot(), i) + graph.distance(graph.depot(), j) - graph.distance(i, j)
  
          sorted_savings_list = sorted(list(savings_list.items()), key=operator.itemgetter(1), reverse=True)
  
          return [nodes for nodes, saving in sorted_savings_list]
docs: Compute Clarke and Wright savings list
  
          A saving list is a matrix containing the saving amount S between i and j
  
          S is calculated by S = d(0,i) + d(0,j) - d(i,j) (CLARKE; WRIGHT, 1964)
          
          Args
          ----
          graph: :networkx:`NetworkX Graph Obj< >`
              A NetworkX graaph is used.
          
          Returns
          -------
          :any:`list` of `Node`
              List of nodes sorted by its savings