Basic usage

sorted() returns a new sorted list (doesn't modify original):

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]
print(numbers)  # [3, 1, 4, 1, 5, 9, 2, 6] (unchanged)

Reverse order

numbers = [3, 1, 4, 1, 5]

# Descending order:
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc)  # [5, 4, 3, 1, 1]

Sort by key

Use key parameter to sort by a function:

# Sort by length:
words = ['apple', 'pie', 'banana', 'a']
sorted_by_length = sorted(words, key=len)
print(sorted_by_length)  # ['a', 'pie', 'apple', 'banana']

# Sort by second element:
pairs = [(1, 3), (2, 1), (3, 2)]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs)  # [(2, 1), (3, 2), (1, 3)]

Sort strings

text = "hello"
sorted_text = sorted(text)
print(sorted_text)  # ['e', 'h', 'l', 'l', 'o']
print(''.join(sorted_text))  # "ehllo"

vs .sort() method

sorted() creates new list; .sort() modifies in place:

numbers = [3, 1, 4]

# sorted() — new list:
new_list = sorted(numbers)  # numbers unchanged

# .sort() — modifies original:
numbers.sort()  # numbers is now [1, 3, 4]