def get_row_list(self, row_idx):
        """ get a feature vector for the nth row

        :param row_idx: which row
        :return: a list of feature values, ordered by column_names
        """

        try:
            row = self._rows[row_idx]
        except TypeError:
            row = self._rows[self._row_name_idx[row_idx]]

        if isinstance(row, list):
            extra = [ self._default_value ] * (len(self._column_name_list) - len(row))
            return row + extra

        else:
            if row_idx not in self._row_memo:
                self._row_memo[row_idx] = [ row[k] if k in row else self._default_value for k in self._column_name_list ]

            return self._row_memo[row_idx]
get a feature vector for the nth row

        :param row_idx: which row
        :return: a list of feature values, ordered by column_names