<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def check_column( problems: List, table: str, df: DataFrame, column: str, checker, type_: str = "error", *, column_required: bool = True, ) -> List: """ Check the given column of the given GTFS with the given problem checker. Parameters problems : list A four-tuple containing 1. A problem type (string) equal to ``'error'`` or ``'warning'``; ``'error'`` means the GTFS is violated; ``'warning'`` means there is a problem but it is not a GTFS violation 2. A message (string) that describes the problem 3. A GTFS table name, e.g. ``'routes'``, in which the problem occurs 4. A list of rows (integers) of the table's DataFrame where the problem occurs table : string Name of a GTFS table df : DataFrame The GTFS table corresponding to ``table`` column : string A column of ``df`` column_required : boolean ``True`` if and only if ``column`` is required (and not optional) by the GTFS checker : boolean valued unary function Returns ``True`` if and only if no problem is encountered type_ : string ``'error'`` or ``'warning'`` indicating the type of problem encountered Returns ------- list The ``problems`` list extended as follows. Apply the checker to the column entries and record the indices of ``df`` where the checker returns ``False``. If the list of indices of is nonempty, append to the problems the item ``[type_, problem, table, indices]``; otherwise do not append anything. If not ``column_required``, then NaN entries will be ignored before applying the checker. """

    f = df.copy()
    if not column_required:
        if column not in f.columns:
            f[column] = np.nan
        f = f.dropna(subset=[column])

    cond = ~f[column].map(checker)
    problems = check_table(
        problems,
        table,
        f,
        cond,
        f"Invalid {column}; maybe has extra space characters",
        type_,
    )

    return problems