Python Sorting
(Source/Credits: https://dev.to/musale/python-tips-sorting-4of2)
Python tips on sorting items
title: Python Sorting published: true description: Python tips on sorting items tags: Python, Tips, Sorting, Algorithms
Introduction
Sorting is a common functionality in day-to-day programming. If you use Python, you are probably familiar with the two common ways you can sort your list values. The sorted()
function is a common way to sort any iterable while list.sort()
is built into the list. The main difference between the two functions is that list.sort()
modifies the list in-place while sorted()
creates a new list of sorted items.
Basic sorting
```Python
sorted([4, 1, 3, 5, 2, 5, 8]) [1, 2, 3, 4, 5, 5, 8] l = [8, 24, 63, 12, 5, 23, 2, 6, 7, 8] l.sort() l [2, 5, 6, 7, 8, 8, 12, 23, 24, 63] ```
Tip 1: Reverse ordering
Both methods allow an optional reverse
key which is a boolean value. You can use this to change the order of the sort from ascending to descending.
```Python
sorted([4, 1, 3, 5, 2, 5, 8], reverse=True) [8, 5, 5, 4, 3, 2, 1] ```
Tip 2: Key function
The 2 list methods have a key
function which allows you to pass in a function that is run before sorting each value.
For instance, if I want to order a string using the upper case I would do:
```Python
sorted("For instance, if I want to order a".split(), key=str.upper) ['a', 'For', 'I', 'if', 'instance,', 'order', 'to', 'want'] ```
For some cases, you might have a list of complex objects which you want to sort with their own index. You can pass a function referencing the index:
Say you have a list of handbag objects with Name
, Size
and Price
properties, you can sort them with the Price
like:
```Python
handbags = [("Gucci", "L", 123), ("Vuitton", "M", 251), ("Jacobs", "S", 207)] handbags.sort(key=lambda bag: bag[2] ) handbags [('Gucci', 'L', 123), ('Jacobs', 'S', 207), ('Vuitton', 'M', 251)] ```
Tip 3: Multiple Level Sorting
Suppose you want to sort the bags according to their Price
and Size
, you can get that done by using Python's operator module which provides itemgetter
and attrgetter
.
```Python
from operator import itemgetter, attrgetter sorted(handbags, key=itemgetter(1,2)) [('Gucci', 'L', 123), ('Vuitton', 'M', 251), ('Jacobs', 'S', 207)] ```
Or make it a list of objects with named attributes and use the names to sort:
```Python
class Bag: ... def init(self, name, size, price): ... self.name = name ... self.price = price ... self.size = size ... def repr(self): ... return repr((self.name, self.size, self.price)) ... bags = [Bag("Gucci", "L", 123), Bag("Vuitton", "M", 251), Bag("Jacobs", "S", 207)] bags.sort(key=attrgetter("price", "size")) bags [('Gucci', 'L', 123), ('Jacobs', 'S', 207), ('Vuitton', 'M', 251)] ```
Conclusion
Sorting list items in Python is pretty easy and these tips can be used to achieve even much more with very little coding complexity. If you're worried about the stability of the sorting, Python sorts are guaranteed to be stable. That means that when multiple records have the same key, their original order is preserved. Python uses Timsort algorithm that does multiple sorts efficiently because it can take advantage of any ordering already present in a dataset. You can read more about sorting in Python here
Comments section