code: def linear_gradient(hexList, nColors):
      
      def _scale(start, finish, length, i):
          """
          Return the value correct value of a number that is in between start
          and finish, for use in a loop of length *length*.
  
          """
          base = 16
  
          fraction = float(i) / (length - 1)
          raynge = int(finish, base) - int(start, base)
          thex = hex(int(int(start, base) + fraction * raynge)).split('x')[-1]
          if len(thex) != 2:
              thex = '0' + thex
          return thex
  
      allColors = []
      # Separate (R, G, B) pairs.
      for start, end in zip(hexList[:-1], hexList[1:]):
          # Linearly intepolate between pair of hex ###### values and
          # add to list.
          nInterpolate = 765
          for index in range(nInterpolate):
              r = _scale(start[1:3], end[1:3], nInterpolate, index)
              g = _scale(start[3:5], end[3:5], nInterpolate, index)
              b = _scale(start[5:7], end[5:7], nInterpolate, index)
              allColors.append(''.join(['#', r, g, b]))
  
      # Pick only nColors colors from the total list.
      result = []
      for counter in range(nColors):
          fraction = float(counter) / (nColors - 1)
          index = int(fraction * (len(allColors) - 1))
          result.append(allColors[index])
      return result
docs: Given a list of hexcode values, will return a list of length
      nColors where the colors are linearly interpolated between the
      (r, g, b) tuples that are given.
  
      Examples
      --------
      >>> linear_gradient([(0, 0, 0), (255, 0, 0), (255, 255, 0)], 100)