Python: Sort one list based on another list containing the desired indexes

Python List: Exercise - 218 with Solution

Write a Python program to sort one list based on another list containing the desired indexes.

  • Use zip() and sorted() to combine and sort the two lists, based on the values of indexes.
  • Use a list comprehension to get the first element of each pair from the result
  • Use the reverse parameter in sorted() to sort the dictionary in reverse order, based on the third argument

Sample Solution:

Python Code:

def sort_by_indexes(lst, indexes, reverse=False):
  return [val for (_, val) in sorted(zip(indexes, lst), key=lambda x: \
          x[0], reverse=reverse)]

l1 = ['eggs', 'bread', 'oranges', 'jam', 'apples', 'milk']
l2 = [3, 2, 6, 4, 1, 5]
print(sort_by_indexes(l1, l2))  
print(sort_by_indexes(l1, l2, True))

Sample Output:

['apples', 'bread', 'eggs', 'jam', 'milk', 'oranges']
['oranges', 'milk', 'jam', 'eggs', 'bread', 'apples']


Flowchart: Sort one list based on another list containing the desired indexes.

Visualize Python code execution:

The following tool visualize what the computer is doing step-by-step as it executes the said program:

Python Code Editor:

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Write a Python program to split values into two groups, based on the result of the given filtering function.
Next: Write a Python program to build a list, using an iterator function and an initial seed value.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.

Follow us on Facebook and Twitter for latest update.

Python: Tips of the Day

Capitalizes the first letter of a string:


def tips_capitalize(s, lower_rest=False):
  return s[:1].upper() + (s[1:].lower() if lower_rest else s[1:])
print(tips_capitalize('pythonTips', True))




We are closing our Disqus commenting system for some maintenanace issues. You may write to us at reach[at]yahoo[dot]com or visit us at Facebook