Sorts one list based on another list containing the desired indexes.
- Use
zip()
andsorted()
to combine and sort the two lists, based on the values ofindexes
. - Use a list comprehension to get the first element of each pair from the result.
- Use the
reverse
parameter insorted()
to sort the dictionary in reverse order, based on the third argument.
def sort_by_indexes(lst, indexes, reverse=False): return [val for (_, val) in sorted(zip(indexes, lst), key=lambda x: \ x[0], reverse=reverse)]
Examples
a = ['eggs', 'bread', 'oranges', 'jam', 'apples', 'milk'] b = [3, 2, 6, 4, 1, 5] sort_by_indexes(a, b) # ['apples', 'bread', 'eggs', 'jam', 'milk', 'oranges'] sort_by_indexes(a, b, True) # ['oranges', 'milk', 'jam', 'eggs', 'bread', 'apples']
Recommended snippets
Learn the difference between Python’s built-in list sorting methods and when one is preferred over the other.
Writing short, efficient Python code is not always straightforward. Read how we optimize our list snippets to increase performance using a couple of simple tricks.
Merges two or more lists into a list of lists, combining elements from each of the input lists based on their positions.