5 Best Ways to Sort a List of Strings by Length in Python

πŸ’‘ Problem Formulation:

When handling lists of strings in Python, a common task is to sort them by length in either ascending or descending order. For instance, given the list ["Python", "is", "awesome"], you might want to sort it to ["is", "Python", "awesome"] based on the length of each string.

Method 1: Using the sorted() Function with a Custom Key Function

This method involves using Python’s built-in sorted() function combined with a custom key function that returns the length of each string. This is a highly readable and Pythonic solution for string length-based sorting.

Here’s an example:

fruits = ["banana", "apple", "cherry", "blueberry"]
sorted_fruits = sorted(fruits, key=len)
print(sorted_fruits)

Output:

['apple', 'banana', 'cherry', 'blueberry']

This code snippet sorts the list of fruits by the length of each fruit name. The key argument in the sorted() function is set to len, which is the built-in function for getting the length of an object.

Method 2: Using the sort() Method with a Lambda Function

The sort() method is called on a list and rearranges the items in place. When used with a lambda function for the key parameter, it becomes a concise way to sort lists by string length.

Here’s an example:

colors = ["red", "blue", "green", "yellow"]
colors.sort(key=lambda color: len(color))
print(colors)

Output:

['red', 'blue', 'green', 'yellow']

In this code, the sort() method rearranges the ‘colors’ list based on the length of each string. The lambda function lambda color: len(color) returns the length of each color name as the key for sorting.

Method 3: Using List Comprehensions and the sorted() Function

List comprehensions in Python can be combined with the sorted() function to create a one-liner that sorts a list of strings by their lengths. It’s a compact yet readable method.

Here’s an example:

bikes = ["Trek", "Cannondale", "Specialized", "Giant"]
sorted_bikes = sorted([(len(bike), bike) for bike in bikes])
sorted_bikes = [bike for length, bike in sorted_bikes]
print(sorted_bikes)

Output:

['Trek', 'Giant', 'Cannondale', 'Specialized']

This snippet first creates tuples of (length, string) for each string in the list, sorts these tuples, and then extracts the sorted strings.

Method 4: Using the sorted() Function with itemgetter

The itemgetter() function from the operator module can be used as a custom key function in the sorted() method. It’s especially useful when sorting a list of tuples by an item at a specific index.

Here’s an example:

from operator import itemgetter
animals = ["dog", "elephant", "cat", "whale"]
sorted_animals = sorted([(len(animal), animal) for animal in animals], key=itemgetter(0))
sorted_animals = [animal for length, animal in sorted_animals]
print(sorted_animals)

Output:

['dog', 'cat', 'whale', 'elephant']

This code creates a list of tuples (string length, string), sorts the tuples by the first item (string length), and then extracts the strings to recover the sorted list.

Bonus One-Liner Method 5: Using sorted() with a Key Function and Reverse Parameter

This one-liner combines a concise lambda key function with the reverse parameter to sort strings by length in descending order, showcasing Python’s ability for writing compact code.

Here’s an example:

tools = ["hammer", "screwdriver", "wrench", "pliers"]
sorted_tools = sorted(tools, key=lambda tool: len(tool), reverse=True)
print(sorted_tools)

Output:

['screwdriver', 'hammer', 'wrench', 'pliers']

This code sorts the ‘tools’ list by the length of each tool name in descending order through the use of the reverse=True parameter in the sorted() function.

Summary/Discussion

  • Method 1: Using the sorted() Function with a Custom Key Function. Strengths: Easy to read and understand. Weaknesses: Creates a new list, not in-place.
  • Method 2: Using the sort() Method with a Lambda Function. Strengths: In-place sorting, saving memory. Weaknesses: Modifies the original list, which might not always be desired.
  • Method 3: Using List Comprehensions and the sorted() Function. Strengths: One-liner and Pythonic. Weaknesses: Less direct than other methods, may be slower due to tuple creation.
  • Method 4: Using the sorted() Function with itemgetter. Strengths: Clean syntax when sorting lists of tuples. Weaknesses: Overhead of creating tuples, less intuitive.
  • Method 5: Bonus One-Liner Using sorted() with a Key Function and Reverse Parameter. Strengths: Short and flexible with the ability to sort in reverse order. Weaknesses: Lambda might be less readable for beginners.