code: def listify(values, N=1, delim=None):
      
      ans = [] if values is None else values
  
      # convert non-string non-list iterables into a list
      if hasattr(ans, '__iter__') and not isinstance(ans, basestring):
          ans = list(ans)
      else:
          # split the string (if possible)
          if isinstance(delim, basestring) and isinstance(ans, basestring):
              try:
                  ans = ans.split(delim)
              except (IndexError, ValueError, AttributeError, TypeError):
                  ans = [ans]
          else:
              ans = [ans]
  
      # pad the end of the list if a length has been specified
      if len(ans):
          if len(ans) < N and N > 1:
              ans += [ans[-1]] * (N - len(ans))
      else:
          if N > 1:
              ans = [[]] * N
  
      return ans
docs: Return an N-length list, with elements values, extrapolating as necessary.
  
      >>> listify("don't split into characters")
      ["don't split into characters"]
      >>> listify("len = 3", 3)
      ['len = 3', 'len = 3', 'len = 3']
      >>> listify("But split on a delimeter, if requested.", delim=',')
      ['But split on a delimeter', ' if requested.']
      >>> listify(["obj 1", "obj 2", "len = 4"], N=4)
      ['obj 1', 'obj 2', 'len = 4', 'len = 4']
      >>> listify(iter("len=7"), N=7)
      ['l', 'e', 'n', '=', '7', '7', '7']
      >>> listify(iter("len=5"))
      ['l', 'e', 'n', '=', '5']
      >>> listify(None, 3)
      [[], [], []]
      >>> listify([None],3)
      [None, None, None]
      >>> listify([], 3)
      [[], [], []]
      >>> listify('', 2)
      ['', '']
      >>> listify(0)
      [0]
      >>> listify(False, 2)
      [False, False]