How to rank elements of a list in Python

1 Answer

0 votes
"""
    FUNCTION: get_ranks
    -------------------
    This function takes a list of numbers and returns a list of ranks.

    Ranking rules used (Competition Ranking):
    -----------------------------------------
    - Highest value gets rank 1
    - Equal values get the same rank
    - Next rank increases by the number of equal values

    Example:
        Values: 88, 4, 19, 4, 1, 31, 14, 1, 93, 17
        Ranks:   2, 7,  4, 7, 9,  3,  6, 9,  1,  5
"""

def get_ranks(lst):
    """
    Computes competition-style ranks for a list of integers.

    Steps:
    1. Make a sorted copy of the list (descending)
    2. Assign ranks to each unique value
    3. Build a rank list matching the original order
    """

    # Step 1: Create a sorted copy (descending)
    sorted_values = sorted(lst, reverse=True)

    # Step 2: Map each unique value to its rank
    rank_map = {}
    rank = 1

    for value in sorted_values:
        # Assign rank only once per unique value
        if value not in rank_map:
            rank_map[value] = rank
        rank += 1  # next rank position

    # Step 3: Build ranking list in original order
    return [rank_map[value] for value in lst]


def print_ranking(lst, ranks):
    """
    Prints the original list and its ranking.
    """
    print("Original list:", lst)
    print("Ranking list :", ranks)


# MAIN PROGRAM
# ---------------------------------------------

lst = [88, 4, 19, 4, 1, 31, 14, 1, 93, 17]

# Compute ranks
ranking_lst = get_ranks(lst)

print_ranking(lst, ranking_lst)



"""
run:

Original list: [88, 4, 19, 4, 1, 31, 14, 1, 93, 17]
Ranking list : [2, 7, 4, 7, 9, 3, 6, 9, 1, 5]

"""

 



answered 2 days ago by avibootz

Related questions

...