<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _add_list_row(self, feature_list, key=None):
 """ Add a list row to the matrix :param str key: key used when rows is a dict rather than an array :param feature_list: a list of features in the same order as column_names :raise IndexError: if the list doesnt match the expected number of columns """

        if len(feature_list) > len(self._column_name_list):
            raise IndexError("Input list must have %s columns or less" % len(self._column_name_list))

        # reset the row memoization
        self._row_memo = {}

        if key is not None:
            if key in self._row_name_idx:
                self._rows[self._row_name_idx[key]] = feature_list
                return
            else:
                self._row_name_idx[key] = len(self._rows)
                self._row_name_list.append(key)

        self._rows.append(feature_list)