def format_row(row: list) -> list:
    """Format a row of scraped data into correct type

    All elements are scraped as strings and should be converted to the proper format to be used. This converts the
    following types:

    - Percentages become floats (Ex: '21.5%' --> 0.215)
    - Numbers become ints (Ex: '2020' --> 2020)
    - '-' becomes None
    - Booleans stay booleans
    - Strings stay strings

    :param row: list to be converted
    :return: list in converted form
    :rtype: list
    """
    new_row = []
    for i in row:
        if type(i) == bool:
            new_row.append(i)
            continue
        i = i.strip()
        if i == '-':
            new_row.append(None)
        elif i[-1] == '%':
            i = i[:-1]
            new_row.append(round(float(i) / 100, len(i)))
        else:
            try:
                new_row.append(int(i))
            except ValueError:
                new_row.append(i)
    return new_row