top

Search

Python Tutorial

.

UpGrad

Python Tutorial

Sort in Python

Introduction

Sorting is a foundational aspect of programming, and in the expansive world of Python, it gains unparalleled significance. As data manipulation and analysis become more prevalent in modern industries, the need to arrange datasets in specific order has grown exponentially. 

Python, with its in-depth libraries and intuitive syntax, offers professionals powerful tools to execute this. In this tutorial, we’re not just going to skim the surface. Instead, we aim to immerse ourselves in the depths of sort in Python, unraveling the intricacies and nuances that every Python enthusiast should know.

Overview

With the expansive toolkit that Python provides, the language boasts diverse methods to sort data – from simple lists to complex data structures. But in this vast arsenal, how do two functions stand out so prominently? sorted() and list.sort() are frequently employed, yet many are unaware of the subtle differences that distinguish them.

These functions, while seemingly interchangeable, serve unique purposes and are tailored for specific scenarios. This tutorial about sort in Python will shed light on these distinct differences, their ideal use cases, and the reasons why a developer might prefer one over the other.

Python sort() Syntax

The sort() method in Python is used to sort the elements of a list in ascending order. It's an in-place sorting method, which means it modifies the original list directly without creating a new list. Here's the syntax for the sort() method:

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

  • list: The list that you want to sort.

  • key (optional): A function that specifies a custom key for sorting. If not provided, the elements are sorted based on their natural order.

  • reverse (optional): If set to True, the list is sorted in descending order. If set to False (default), the list is sorted in ascending order.

Here's an example of using the sort() method:

Code:

numbers = [5, 2, 9, 1, 5]
numbers.sort()  # Sort in ascending order
print(numbers)  # Output: [1, 2, 5, 5, 9]
names = ["Alice", "Bob", "Charlie", "David"]
names.sort(reverse=True)  # Sort in descending order
print(names)  # Output: ['David', 'Charlie', 'Bob', 'Alice']

If you want to create a sorted version of a list without modifying the original list, you can use the sorted() function:

Code:

numbers = [5, 2, 9, 1, 5]
sorted_numbers = sorted(numbers)  # Creates a new sorted list
print(sorted_numbers)  # Output: [1, 2, 5, 5, 9]
print(numbers)  # Original list remains unchanged: [5, 2, 9, 1, 5]

Remember that the sort() method and the sorted() function are specifically for lists. Other types of collections (like tuples and dictionaries) may have different methods or functions for sorting.

sort() in Python Examples

Code:

numbers = [5, 2, 9, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # Output: [1, 2, 5, 5, 9]
print(numbers)  # Original list remains unchanged: [5, 2, 9, 1, 5]
names = ["Alice", "Bob", "Charlie", "David"]
sorted_names = sorted(names, reverse=True)
print(sorted_names)  # Output: ['David', 'Charlie', 'Bob', 'Alice']
print(names)  # Original list remains unchanged: ['Alice', 'Bob', 'Charlie', 'David']

Explanation:

  • You create a list called numbers with elements [5, 2, 9, 1, 5].

  • You use the sorted() function on the numbers list, creating a new sorted list called sorted_numbers. The sorted_numbers list contains the sorted elements [1, 2, 5, 5, 9]

  • You print the sorted_numbers list, which outputs [1, 2, 5, 5, 9]

  • You print the original numbers list, which remains unchanged: [5, 2, 9, 1, 5].

Next Part:

  • You create a list called names with elements ["Alice", "Bob", "Charlie", "David"].

  • You use the sorted() function on the names list, creating a new sorted list called sorted_names. The sorted_names list contains the names sorted in descending order ['David', 'Charlie', 'Bob', 'Alice'].

  • You print the sorted_names list, which outputs ['David', 'Charlie', 'Bob', 'Alice'].

  • You print the original names list, which remains unchanged: ['Alice', 'Bob', 'Charlie', 'David'].

Sorting List in Ascending Order

Code:

numbers = [5, 2, 9, 1, 5]
numbers.sort()
print(numbers)  # Output: [1, 2, 5, 5, 9]

Explanation:

  • You define a list named numbers with elements [5, 2, 9, 1, 5].

  • You apply the sort() method to the numbers list. This method sorts the list in ascending order, modifying the list in-place. After this line, the numbers list will be [1, 2, 5, 5, 9].

  • You use the print() function to output the sorted numbers list. The output will be: [1, 2, 5, 5, 9].

Sorting List in Descending Order

Code:

numbers = [5, 2, 9, 1, 5]
numbers.sort(reverse=True)
print(numbers)  # Output: [9, 5, 5, 2, 1]

Explanation:

  • You define a list named numbers with elements [5, 2, 9, 1, 5].

  • You apply the sort() method to the numbers list. By passing reverse=True as an argument, you indicate that the list should be sorted in descending order. The method sorts the list in-place, modifying the list itself.

  • After the sort() method call, the numbers list is sorted in descending order, so it becomes [9, 5, 5, 2, 1].

  • You use the print() function to output the sorted numbers list. The output will be: [9, 5, 5, 2, 1].

Sorting List with Custom Function

The sort() method and the sorted() function both allow you to pass a key argument that specifies a function that calculates a value for each element in the list. The sorting is then based on these calculated values. Here's how you can do it:

Using sort() method with a custom function:

Code:

def custom_key(element):
    return element % 3  # Sorting based on the remainder when divided by 3
numbers = [5, 2, 9, 1, 5]
numbers.sort(key=custom_key)
print(numbers)  # Output: [9, 2, 5, 5, 1]

In this example, the sort() method is used with the key parameter set to the custom_key function. The list is sorted based on the values returned by the custom_key function.

Using sorted() function with a custom function:

Code:

def custom_key(element):
    return element % 3  # Sorting based on the remainder when divided by 3
numbers = [5, 2, 9, 1, 5]
sorted_numbers = sorted(numbers, key=custom_key)
print(sorted_numbers)  # Output: [9, 2, 5, 5, 1]
print(numbers)  # Original list remains unchanged: [5, 2, 9, 1, 5]

In this example, the sorted() function is used with the key parameter set to the custom_key function. The sorted() function creates a new sorted list based on the sorting criteria defined by the custom_key function.

You can customize the custom_key function to define any sorting logic you need. The sorting will be based on the values returned by this function for each element in the list.

Difference Between sorted() and sort() Functions in Python

In Python, efficient data manipulation often boils down to understanding the tools at one's disposal. Among these tools, the sorting functions, sorted() and list.sort(), are quintessential. Despite their apparent similarities, they harbor distinct characteristics:

  • Return Type:

    • sorted(): Generates a new list, leaving the original untouched.

    • list.sort(): Alters the original list in place and yields None.

  • Usability:

    • sorted(): A versatile choice, it is compatible with any iterable, be it lists, tuples, or strings.

    • list.sort(): Tailored specifically for lists, making it restrictive in comparison.

  • Key Function: Both functions are flexible, welcoming a custom key function to guide the sorting process. This proves invaluable when one desires to sort beyond mere numerical or alphabetical orders, like custom business rules or data priorities.

  • Stability: Stability in sorting algorithms is a mark of reliability. It ensures that when two elements are deemed equal, their original order remains unaltered post-sorting. Fortunately, both sorted() and list.sort() upholds this standard.

  • Reverse Order: Sometimes, descending order suits better than the default ascending. Both functions cater to this need, facilitated by the reverse parameter.

Feature

sorted()

list.sort()

Returns

New List

None

Works With

Any Iterable

Lists Only

Key Function

Yes

Yes

Stable

Yes

Yes

Reverse Sorting

Yes

Yes

While both functions serve the broader goal of sorting, the context and requirements dictate their usage. Whether it's the flexibility of sorted() working with any iterable or the in-place efficiency of list.sort(), understanding these nuances ensures effective Python programming.

Advantages of using sort() in Python

The sort() method in Python is used to sort elements in a list in place. It offers several advantages when compared to other methods or algorithms for sorting:

  • In-Place Sorting: The most significant advantage of the sort() method is that it sorts the elements of the list directly without creating a new list. This leads to better memory usage and can be especially beneficial for large lists where memory efficiency is crucial.

  • Efficiency: The built-in sort() method is highly optimized and uses efficient sorting algorithms under the hood (usually Timsort, a hybrid sorting algorithm derived from merge sort and insertion sort). This results in faster sorting times for most real-world scenarios.

  • Simplicity: Using the sort() method is simple and straightforward. You only need to call the method on the list, and it handles all the sorting details for you. This simplicity is particularly useful for quick sorting tasks.

  • Predictable Performance: The built-in sorting algorithms are well-tested and optimized. This ensures predictable performance for a wide range of input sizes and distributions.

  • No Need for Additional Libraries: Since the sort() method is a built-in feature of Python lists, you don't need to import external libraries or modules to perform sorting. This reduces code dependencies and keeps your codebase clean.

  • Customizable: The sort() method provides a key parameter that allows you to define custom sorting criteria using a function. This gives you the flexibility to sort based on specific needs without writing complex sorting logic.

  • Stability: The sorting algorithm used by the sort() method is stable, meaning it preserves the relative order of equal elements. This is useful when you want to sort based on multiple criteria.

  • Consistent Syntax: Since the sort() method is part of the list class, it follows the same syntax and conventions as other list operations, making it easy to remember and use.

Despite these advantages, keep in mind that the sort() method modifies the original list. If you want to keep the original list unchanged and create a sorted copy, you can use the sorted() function.

In summary, the sort() method provides a convenient and efficient way to sort lists in Python, and its built-in nature makes it a popular choice for most sorting tasks.

Conclusion

As we journey through the Python ecosystem, it becomes evident that its sorting capabilities are not just a mere tool but a testament to Python's versatility and power. Grasping the distinctions between sorted() and sort() is not just about knowing two functions; it’s about understanding the philosophy behind Python’s design – making complex tasks accessible yet providing depth for those who seek it.

While this tutorial offers a comprehensive insight, continuous learning is the key to mastering Python. If you're committed to delving even deeper, upGrad offers courses tailored for professionals. Their courses are meticulously crafted, ensuring that you stay at the forefront of the ever-evolving tech landscape.

FAQs

1. What does Python sort returns none mean?

The sort() method modifies the original list and doesn’t return a new one. Instead, it returns None, indicating the in-place modification.

2. How can I sort string Python?

Use sorted() to sort the characters in a string. This returns a list of characters, which can be joined using join().

3. What’s the difference between sort list in Python and a NumPY sort?

While Python’s native sorting works for general lists, NumPY sort is optimized for sorting large arrays in the NumPy library.

4. How can I use Python sort dictionary?

Dictionaries can be sorted by keys or values. Python sort set using the sorted() function, returning a list of sorted values.

5. Is there a way to sort list online?

Yes, there are multiple online platforms where you can input lists and get them sorted. However, in Python, sorting natively is straightforward using sort() or sorted().

Leave a Reply

Your email address will not be published. Required fields are marked *