Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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].
