Python Program to Sort A List Of Names By Last Name

In this article, we will learn how to sort a list of names by last name using Python. This is a common task when working with name data that needs alphabetical ordering by surname.

Methods Used

  • Using lambda with sorted() function

  • Using lambda with sort() method

Example Overview

Let's assume we have a list containing full names as strings. We need to sort these names alphabetically by their last names ?

Input

names = ['sachin tendulkar', 'suresh raina', 'hardik pandya']

Expected Output

['hardik pandya', 'suresh raina', 'sachin tendulkar']

The last names are: tendulkar (t), raina (r), pandya (p). Sorting alphabetically gives us: pandya, raina, tendulkar (p < r < t).

Method 1: Using Lambda with sorted() Function

Understanding the Components

The lambda function creates an anonymous function for extracting the last name, while sorted() returns a new sorted list without modifying the original.

Syntax

sorted(iterable, key=function, reverse=False)

Complete Example

def sort_by_last_name_sorted(names):
    """Sort names by last name using sorted() function"""
    return sorted(names, key=lambda name: name.split()[-1])

# Input list of names
names = ['sachin tendulkar', 'suresh raina', 'hardik pandya']

print("Original List:", names)
sorted_names = sort_by_last_name_sorted(names)
print("Sorted by Last Name:", sorted_names)
print("Original List Unchanged:", names)
Original List: ['sachin tendulkar', 'suresh raina', 'hardik pandya']
Sorted by Last Name: ['hardik pandya', 'suresh raina', 'sachin tendulkar']
Original List Unchanged: ['sachin tendulkar', 'suresh raina', 'hardik pandya']

Method 2: Using Lambda with sort() Method

The sort() method modifies the original list in-place, making it memory efficient for large datasets ?

Complete Example

def sort_by_last_name_inplace(names):
    """Sort names by last name using sort() method (modifies original list)"""
    names.sort(key=lambda name: name.split()[-1])
    return names

# Input list of names
names = ['sachin tendulkar', 'suresh raina', 'hardik pandya']

print("Original List:", names)
sorted_names = sort_by_last_name_inplace(names.copy())  # Using copy to show difference
print("Sorted by Last Name:", sorted_names)

# Demonstrating in-place sorting
original_names = ['sachin tendulkar', 'suresh raina', 'hardik pandya']
original_names.sort(key=lambda name: name.split()[-1])
print("After in-place sorting:", original_names)
Original List: ['sachin tendulkar', 'suresh raina', 'hardik pandya']
Sorted by Last Name: ['hardik pandya', 'suresh raina', 'sachin tendulkar']
After in-place sorting: ['hardik pandya', 'suresh raina', 'sachin tendulkar']

How the Lambda Function Works

The lambda function lambda name: name.split()[-1] works as follows ?

# Breaking down the lambda function
name = "sachin tendulkar"

# Step 1: Split the name into parts
name_parts = name.split()
print("Name parts:", name_parts)

# Step 2: Get the last element (index -1)
last_name = name_parts[-1]
print("Last name:", last_name)

# This is equivalent to: lambda name: name.split()[-1]
Name parts: ['sachin', 'tendulkar']
Last name: tendulkar

Comparison

Method Modifies Original Returns Best For
sorted() No New list When you need to keep original list
sort() Yes None Memory efficiency with large lists

Handling Edge Cases

# Handling names with different formats
mixed_names = ['John Doe', 'Jane Smith-Wilson', 'Madonna', 'Jean-Claude Van Damme']

# Sort by last name (handles single names too)
sorted_mixed = sorted(mixed_names, key=lambda name: name.split()[-1])
print("Mixed formats sorted:", sorted_mixed)
Mixed formats sorted: ['Jean-Claude Van Damme', 'John Doe', 'Madonna', 'Jane Smith-Wilson']

Conclusion

Use sorted() with lambda when you need to preserve the original list, and sort() for in-place sorting. Both methods efficiently sort names by extracting the last name using split()[-1].

Updated on: 2026-03-27T00:03:19+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements