Python List sort() Method

list.sort() is the built-in list method for sorting items in a list.

Use this page as a quick reference for what sort() does, how its main arguments work, and the beginner mistakes to avoid.

Quick example #

numbers = [3, 1, 2]
numbers.sort()
print(numbers)  # [1, 2, 3]

Use list.sort() to sort a list in place. It changes the original list and returns None.

What list.sort() does #

list.sort():

  • Sorts the items of a list in place
  • Changes the original list
  • Returns None
  • Works for numbers and strings when items can be compared

This means the list itself is updated after you call the method.

numbers = [5, 2, 9, 1]
numbers.sort()

print(numbers)

Output:

[1, 2, 5, 9]

If you are still learning how lists work, see the Python lists beginner guide.

Basic syntax #

my_list.sort(key=None, reverse=False)

Main arguments:

  • key lets you sort by a custom rule
  • reverse=True sorts in descending order
  • If no arguments are given, sorting is ascending

Example:

numbers = [4, 1, 7, 2]
numbers.sort(reverse=True)

print(numbers)

Output:

[7, 4, 2, 1]

Sort numbers #

Use sort() when you want to sort numbers in ascending order.

numbers = [10, 3, 8, 1]
numbers.sort()

print(numbers)

Output:

[1, 3, 8, 10]

Use reverse=True for descending order:

numbers = [10, 3, 8, 1]
numbers.sort(reverse=True)

print(numbers)

Output:

[10, 8, 3, 1]

The important thing to remember is that the original list is updated after the method call.

For a task-focused guide, read how to sort a list in Python.

Sort strings #

Strings are sorted alphabetically by default.

words = ["banana", "apple", "cherry"]
words.sort()

print(words)

Output:

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

Uppercase and lowercase letters affect the result:

words = ["banana", "Apple", "cherry"]
words.sort()

print(words)

Output:

['Apple', 'banana', 'cherry']

If you want case-insensitive sorting, use key=str.lower:

words = ["banana", "Apple", "cherry"]
words.sort(key=str.lower)

print(words)

Output:

['Apple', 'banana', 'cherry']

The original spelling stays the same. Python only uses str.lower as the sorting rule.

Using the key argument #

The key argument changes how each item is compared.

Common examples:

  • len to sort by length
  • str.lower to sort strings without case problems

Sort words by length:

words = ["pear", "banana", "fig", "apple"]
words.sort(key=len)

print(words)

Output:

['fig', 'pear', 'apple', 'banana']

Sort strings without case sensitivity:

words = ["Bob", "alice", "Carol"]
words.sort(key=str.lower)

print(words)

Output:

['alice', 'Bob', 'Carol']

The key argument is especially useful when the default alphabetical or numeric order is not what you want.

list.sort() vs sorted() #

list.sort() and sorted() both sort data, but they work differently.

list.sort():

  • Changes the existing list
  • Returns None

sorted():

  • Returns a new sorted list
  • Leaves the original unchanged

Example:

numbers = [3, 1, 2]

new_list = sorted(numbers)

print(numbers)
print(new_list)

Output:

[3, 1, 2]
[1, 2, 3]

Use sorted() when you want to keep the original list unchanged.

You can learn more in Python sorted() explained and sorted() vs list.sort() explained.

Common mistakes #

Here are the most common beginner mistakes with list.sort().

Assigning the result of sort() #

This is a very common mistake:

numbers = [3, 1, 2]
result = numbers.sort()

print(result)
print(numbers)

Output:

None
[1, 2, 3]

sort() does not return the sorted list. It returns None.

If you want a new list, use sorted() instead.

Sorting mixed types #

Python cannot always compare different types directly.

items = [1, "two", 3]
items.sort()

This raises a TypeError because Python cannot sort integers and strings together by default.

Forgetting that sort() only works on lists #

sort() is a list method. It does not work directly on tuples or strings.

Wrong:

text = "python"
text.sort()

Strings do not have a sort() method.

If needed, convert the data first:

letters = list("python")
letters.sort()

print(letters)

Output:

['h', 'n', 'o', 'p', 't', 'y']

Not using key when custom sorting is needed #

If the default order is not correct for your problem, you may need key.

For example, if you want to sort words by length, plain sort() will not do that:

words = ["banana", "fig", "apple"]
words.sort(key=len)

print(words)

Unexpected string order because of uppercase letters #

This often surprises beginners:

words = ["zebra", "Apple", "monkey"]
words.sort()

print(words)

Output:

['Apple', 'monkey', 'zebra']

Use key=str.lower if you want case-insensitive sorting.

Useful debugging checks #

If sorting is not working as expected, these quick checks can help:

print(my_list)
print(type(my_list))
print(my_list.sort())
print(sorted(my_list))
print([type(item) for item in my_list])

These checks help you confirm:

  • What values are in the list
  • Whether the object is really a list
  • That sort() returns None
  • Whether sorted() works better for your case
  • Whether the list contains mixed data types

If your problem is caused by incompatible values, see a guide for fixing sorting-related TypeError problems.

FAQ #

Does list.sort() return a new list? #

No. It changes the original list and returns None.

What is the difference between sort() and sorted()? #

sort() changes the list itself. sorted() creates and returns a new sorted list.

How do I sort in reverse order? #

Use:

my_list.sort(reverse=True)

How do I sort strings without case problems? #

Use:

my_list.sort(key=str.lower)

This sorts in a case-insensitive way.

Why do I get a TypeError when sorting? #

Your list may contain values that Python cannot compare directly, such as strings and integers together.

See also #

Press Esc to close