• + 3 comments

    Python3 solution, using a decorator to wrap the name formatting function in a function to sort and format the list.

    import operator
    
    people = [input().split() for i in range(int(input()))]
    
    def person_lister(f):
        def inner(people):
            return [f(person) for person in sorted(people, key=operator.itemgetter(2))]
        return inner
    
    @person_lister
    def name_format(person):
        return ("Mr. " if person[3] == "M" else "Ms. ") + person[0] + " " + person[1]
    
    print(*name_format(people), sep='\n')