How to Sort a List in Python


In this tutorial, you will learn how to sort a list in Python, by following the below three steps:

  1. Options to sort a list in Python
    • What is the difference between “sort” and “sorted”
    • An example of using “sort”
    • An example of using “sorted”
  2. How to Sort a List in Reverse
    • Sort a list in Reverse using “sort”
    • Sort a list in Reverse using “sorted”
  3. Sort with a Custom Function using Key

1. Options to sort a list in Python

There exist two main options, those are sort() and sorted(), let’s explore them below.

What is the difference between “sort” and “sorted”

list.sort() changes the list in place and returns None.

sorted() takes an iterable and returns a new list, sorted.

An example of using “sort”

# create a list of unordered items
our_list = ["f", "a", "c", "z", "b"]

# sort the list
new_list = our_list.sort()

# print the new list
print(new_list)
# result: None

print(our_list)
# result: ['a', 'b', 'c', 'f', 'z']

Notice how it changes the list itself, but does not return a value to be placed into a new variable.

An example of using “sorted”

# create a list of unordered items
our_list = ["f", "a", "c", "z", "b"]

# sort the list
new_list = sorted(our_list)

# print the new list
print(new_list)

# result: ['a', 'b', 'c', 'f', 'z']

Notice how the changes are saved to the new list/variable.

2. How to Sort a List in Reverse

Using the above functions, it’s simple to sort a list in reverse. Just specify the reverse argument and set it to True.

Sort a List in Reverse using “sort”

# create a list of unordered items
our_list = ["f", "a", "c", "z", "b"]

# sort the list
new_list = our_list.sort(reverse=True)

print(our_list)
# result: ['z', 'f', 'c', 'b', 'a']

Sort a List in Reverse using “sorted”

# create a list of unordered items
our_list = ["f", "a", "c", "z", "b"]

# sort the list
new_list = sorted(our_list, reverse=True)

# print the new list
print(new_list)

# result: ['z', 'f', 'c', 'b', 'a']

3. Sort with a Custom Function using Key

It is also possible to implement your own sorting method. This is done by adding a key parameter and setting it to a method.

For example:

# create a list of different length items
our_list = ["fasd", "asstt", "cqasf", "zqfwsef", "ba"]

# sort the list, by `len`
new_list = sorted(our_list, key=len)

# print the new list
print(new_list)

# result: ['ba', 'fasd', 'asstt', 'cqasf', 'zqfwsef']

Just as we used sorted here, you could also have used list.sort as follows:

our_list.sort(key=len)

As before, you can also combine the reverse=True argument should you want the reverse order.

our_list.sort(key=len, reverse=True)

# or

sorted(our_list, key=len, reverse=True)

You could also swap out the use of the len method as the custom key with your own function, or lambda, to sort by some custom choice.

For example:

student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2]) 

# result: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

Or in another example:

lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)

# result: [('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]