Sort a List, String, Tuple in Python: sort, sorted
In Python, there are two ways to sort a list in ascending or descending order: the sort() method and the built-in sorted() function. To sort a string (str) or tuple, use sorted().
For information on reversing or randomly shuffling elements, refer to the following articles.
- Reverse a list, string, tuple in Python (reverse, reversed)
- Shuffle a list, string, tuple in Python (random.shuffle, sample)
Sort a list using the sort() method
sort() is a method for the list type.
sort() is a destructive process that sorts the original list in place.
l = [3, 1, 4, 5, 2] l.sort() print(l) # [1, 2, 3, 4, 5] Note that sort() returns None.
print(l.sort()) # None By default, the list is sorted in ascending order. To sort in descending order, set the reverse argument to True.
l.sort(reverse=True) print(l) # [5, 4, 3, 2, 1] Sort a list using the built-in sorted() function
sorted() is a built-in function.
sorted() returns a sorted list, while the original list remains unchanged.
l = [3, 1, 4, 5, 2] l_sorted = sorted(l) print(l_sorted) # [1, 2, 3, 4, 5] print(l) # [3, 1, 4, 5, 2] Like sort(), the list is sorted in ascending order by default. To sort in descending order, set the reverse argument to True.
l_reverse_sorted = sorted(l, reverse=True) print(l_reverse_sorted) # [5, 4, 3, 2, 1] print(l) # [3, 1, 4, 5, 2] Sort with the key argument in sort() and sorted()
Both sort() and sorted() support the key argument, which accepts a callable object (e.g., a function) that takes a single argument.
For example, you can sort by absolute value for numbers or the character count for strings. While the following examples use sorted(), the same approach applies to sort().
l = [-3, 1, 4, -5, 2] print(sorted(l)) # [-5, -3, 1, 2, 4] print(sorted(l, key=abs)) # [1, 2, -3, 4, -5] l = ['b', 'cc', 'aaa'] print(sorted(l)) # ['aaa', 'b', 'cc'] print(sorted(l, key=len)) # ['b', 'cc', 'aaa'] To learn more about key, refer to the following article.
You can find examples using key in the following articles.
- How to use the key argument in Python (sorted, max, etc.)
- Sort a list of dictionaries by the value of the specific key in Python
- Sort a 2D list in Python
- Sort a list of numeric strings in Python
How to sort a string and tuple
Since strings and tuples are immutable, they do not have a sort() method that can modify the original object in place.
However, sorted() accepts any iterable objects, including lists, strings, and tuples, and returns a new sorted list.
Sort strings
When a string is passed to sorted(), it returns a list of sorted characters.
s = 'cebad' l_sorted = sorted(s) print(l_sorted) # ['a', 'b', 'c', 'd', 'e'] print(s) # cebad Use the join() method to concatenate a list of characters into a single string.
s_sorted = ''.join(l_sorted) print(s_sorted) # abcde You can write it all at once. To sort in descending order, set the reverse argument to True.
s_sorted = ''.join(sorted(s)) print(s_sorted) # abcde s_reverse_sorted = ''.join(sorted(s, reverse=True)) print(s_reverse_sorted) # edcba The above examples are for sorting the string itself. If you deal with a list of strings, you can use both sort() and sorted().
l = ['banana', 'cherry', 'apple'] print(sorted(l)) # ['apple', 'banana', 'cherry'] l.sort() print(l) # ['apple', 'banana', 'cherry'] Character order is determined by the Unicode code points of the characters.
Sort tuples
Sorting tuples follows the same approach as with strings. sorted() returns a sorted list when a tuple is passed.
t = (3, 1, 4, 5, 2) l_sorted = sorted(t) print(l_sorted) # [1, 2, 3, 4, 5] print(t) # (3, 1, 4, 5, 2) Use tuple() to convert a list to a tuple.
t_sorted = tuple(l_sorted) print(t_sorted) # (1, 2, 3, 4, 5) You can write it all at once. To sort in descending order, set the reverse argument to True.
t_sorted = tuple(sorted(t)) print(t_sorted) # (1, 2, 3, 4, 5) t_reverse_sorted = tuple(sorted(t, reverse=True)) print(t_reverse_sorted) # (5, 4, 3, 2, 1)