Get the best out of our app
GFG App
Open App
Browser
Continue

# Python | sort list of tuple based on sum

Given, a list of tuple, the task is to sort the list of tuples based on the sum of elements in the tuple.

Examples:

Input: [(4, 5), (2, 3), (6, 7), (2, 8)]
Output: [(2, 3), (4, 5), (2, 8), (6, 7)]

Input: [(3, 4), (7, 8), (6, 5)]
Output: [(3, 4), (6, 5), (7, 8)]

# Method 1: Using bubble sort Using the technique of Bubble Sort to we can perform the sorting. Note that each tuple is an element in the given list. Access the elements of each tuple using the nested loops. This performs the in-place method of sorting. The time complexity is similar to the Bubble Sort i.e. O(n^2).

## Python3

 `# Python code to sort list of tuple based on sum of element in tuple.`   `# Input list initialisation` `Input` `=` `[(``4``, ``5``), (``2``, ``3``), (``6``, ``7``), (``2``, ``8``)] `   `print``("The original ``list` `of ``tuple` `is` `")` `print``(``Input``)`   `# getting length of list of tuples` `lst ``=` `len``(``Input``)`   `# Bubble sort` `for` `i ``in` `range``(lst):` `    `  `    ``for` `j ``in` `range``(lst``-``i``-``1``):` `        ``if` `(``Input``[j][``0``]``+``Input``[j][``1``]) > (``Input``[j``+``1``][``0``]``+``Input``[j``+``1``][``1``]):` `            ``Input``[j], ``Input``[j``+``1``] ``=` `Input``[j``+``1``], ``Input``[j]`     `# print output` `print``("\nThe answer ``is``")` `print``(``Input``)`

Output:

```The original list of tuple is
[(4, 5), (2, 3), (6, 7), (2, 8)]

The answer is
[(2, 3), (4, 5), (2, 8), (6, 7)]```

# Method 2: Using sorted() method This is the most basic efficient and short method to achieve the solution to this task. In this, we pass lambda as key to the list of tuples.

## Python3

 `# Python code to sort list of tuple based on sum of element in tuple.`   `# Input list initialisation` `Input` `=` `[(``4``, ``5``), (``2``, ``3``), (``6``, ``7``), (``2``, ``8``)] `   `print``("The original ``list` `of ``tuple` `is` `")` `print``(``Input``)`   `# Passing lambda as key to sort list of tuple` `print``("\nThe answer ``is``")` `print``(``sorted``(``Input``, key ``=` `lambda` `x:x[``0``] ``+` `x[``1``]))`

Output:

```The original list of tuple is
[(4, 5), (2, 3), (6, 7), (2, 8)]

The answer is
[(2, 3), (4, 5), (2, 8), (6, 7)]```

# Method 3: Using sort() method While sorting via this method the actual content of the tuple is changed, and just like the bubble sort, the in-place method of the sort is performed.

## Python3

 `# Python code to sort list of tuple based on sum of element in tuple.`   `# Input list initialisation` `Input` `=` `[(``4``, ``5``), (``2``, ``3``), (``6``, ``7``), (``2``, ``8``)] `   `print``("The original ``list` `of ``tuple` `is` `")` `print``(``Input``)`   `# Passing lambda as key to sort list of tuple` `Input``.sort(key ``=` `lambda` `x: x[``0``] ``+` `x[``1``])`   `# Printing output` `print``("\nThe answer ``is``")` `print``(``Input``)`

Output:

```The original list of tuple is
[(4, 5), (2, 3), (6, 7), (2, 8)]

The answer is
[(2, 3), (4, 5), (2, 8), (6, 7)]```

#### Approach#4: Using sum()

Create a new list of tuples where the first element is the sum of each tuple and the second element is the original tuple. Sort the new list based on the first element (the sum). Extract and return only the original tuples from the sorted list.

#### Algorithm

1. Define a function that takes a list of tuples as input.
2. Create a new list of tuples where the first element is the sum of each tuple and the second element is the original tuple.
3. Sort the new list based on the first element (the sum).
4. Extract and return only the original tuples from the sorted list.

## Python3

 `def` `sort_tuples_by_sum(lst):` `    ``# create a new list of tuples where the first element is the sum of each tuple and the second element is the original tuple` `    ``sum_tuples ``=` `[(``sum``(t), t) ``for` `t ``in` `lst]` `    ``# sort the new list based on the first element (the sum)` `    ``sorted_sum_tuples ``=` `sorted``(sum_tuples, key``=``lambda` `x: x[``0``])` `    ``# extract and return only the original tuples from the sorted list` `    ``return` `[t[``1``] ``for` `t ``in` `sorted_sum_tuples]` `    `  `# example usage` `lst ``=` `[(``4``, ``5``), (``2``, ``3``), (``6``, ``7``), (``2``, ``8``)]` `print``(sort_tuples_by_sum(lst)) `   `lst ``=` `[(``3``, ``4``), (``7``, ``8``), (``6``, ``5``)]` `print``(sort_tuples_by_sum(lst)) `

Output

```[(2, 3), (4, 5), (2, 8), (6, 7)]
[(3, 4), (6, 5), (7, 8)]```

Time Complexity: O(nlogn), where n is length of list
Space Complexity: O(n)

My Personal Notes arrow_drop_up
Similar Reads
Related Tutorials