'Initialize table from a list of columns.  A column can be a
Column object, np.ndarray, mixin, or any other iterable object.'

def _init_from_list(self, data, names, dtype, n_cols, copy):

    if (data and all((isinstance(row, dict) for row in data))):
        self._init_from_list_of_dicts(data, names, dtype, n_cols, copy)
        return
    self._set_masked_from_cols(data)
    cols = []
    def_names = _auto_names(n_cols)
    for (col, name, def_name, dtype) in zip(data, names, def_names, dtype):
        if (isinstance(col, np.ndarray) and (len(col.dtype) > 1) and (not self._add_as_mixin_column(col))):
            col = col.view(NdarrayMixin)
        if isinstance(col, (Column, MaskedColumn)):
            col = self.ColumnClass(name=(name or col.info.name or def_name), data=col, dtype=dtype, copy=copy, copy_indices=self._init_indices)
        elif self._add_as_mixin_column(col):
            if copy:
                col = col_copy(col, copy_indices=self._init_indices)
            col.info.name = (name or col.info.name or def_name)
        elif (isinstance(col, np.ndarray) or isiterable(col)):
            col = self.ColumnClass(name=(name or def_name), data=col, dtype=dtype, copy=copy, copy_indices=self._init_indices)
        else:
            raise ValueError(u'Elements    in    list    initialization    must    be    either    Column    or    list-like')
        cols.append(col)
    self._init_from_cols(cols)
