code: def simpleabut (source, addon):
      
      if type(source) not in [ListType,TupleType]:
          source = [source]
      if type(addon) not in [ListType,TupleType]:
          addon = [addon]
      minlen = min(len(source),len(addon))
      list = copy.deepcopy(source)                # start abut process
      if type(source[0]) not in [ListType,TupleType]:
          if type(addon[0]) not in [ListType,TupleType]:
              for i in range(minlen):
                  list[i] = [source[i]] + [addon[i]]        # source/addon = column
          else:
              for i in range(minlen):
                  list[i] = [source[i]] + addon[i]        # addon=list-of-lists
      else:
          if type(addon[0]) not in [ListType,TupleType]:
              for i in range(minlen):
                  list[i] = source[i] + [addon[i]]        # source=list-of-lists
          else:
              for i in range(minlen):
                  list[i] = source[i] + addon[i]        # source/addon = list-of-lists
      source = list
      return source
docs: Concatenates two lists as columns and returns the result.  '2D' lists
  are also accomodated for either argument (source or addon).  This DOES NOT
  repeat either list to make the 2 lists of equal length.  Beware of list pairs
  with different lengths ... the resulting list will be the length of the
  FIRST list passed.
  
  Usage:   simpleabut(source,addon)  where source, addon=list (or list-of-lists)
  Returns: a list of lists as long as source, with source on the 'left' and
                   addon on the 'right'