Open In App

Largest Number Possible from List of Given Numbers – Python

Last Updated : 17 Jan, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

To find the largest number possible from a list of given numbers, we arrange the elements in such a way that their concatenation forms the largest possible number. This involves comparing the numbers based on how their string representations concatenate with each other. By sorting the numbers accordingly and then joining them, we can achieve the desired result.

Using sorted()

sorted() allows us to sort the list based on a custom key. By converting the numbers to strings, we can concatenate them in two orders and choose the order that produces the largest result.

Python
from functools import cmp_to_key
li= [23, 65, 98, 3, 4]

# largest possible number in list 
res = sorted(li, key = cmp_to_key(lambda i, j: -1 
                if str(j) + str(i) < str(i) + str(j) else 1))
print (''.join(map(str,res)))

Output
98654323

Explanation:

  • cmp_to_key() converts the comparison function to a key for sorting.
  • Lambda function checks if str(j) + str(i) is smaller than str(i) + str(j). If true, i comes before j.
  • sorted() sorts the numbers based on this custom logic.
  • ''.join() concatenates the sorted numbers into a string.

Using itertools.permutation()

In this approach, we generate all possible permutations of the numbers, join each permutation to form a number, and then choose the maximum of these numbers.

Python
from itertools import permutations
li = [23, 65, 98, 3, 4]

res = int(max((''.join(i) for i in permutations(str(i) for i in li)), key = int))
print (str(res))

Output
98654323

Explanation:

  • permutations(str(i) for i in li) creates all permutations of the digits of each number.
  • ''.join(i) combines the digits in each permutation to form a number.
  • max(..., key=int) selects the largest number by comparing the integer values of the permutations.
  • int() converts the result to an integer

Using functools

In this method, we define a custom comparison function that compares two numbers based on their concatenated value in both possible orders. sorted() function then uses this comparison function to sort the list in descending order.

Python
from functools import cmp_to_key
li = [23, 65, 98, 3, 4]
 
# custom comparison function
def compare(a, b):
    ab = int(str(a) + str(b))
    ba = int(str(b) + str(a))
    if ab > ba:
        return -1
    elif ab < ba:
        return 1
    else:
        return 0
  
res = sorted(li, key=cmp_to_key(compare))
print (''.join(map(str,res)))

Output
98654323

Explanation:

  • compare(a, b)concatenates a and b in both orders, then compares them.
  • sorted(li, key=cmp_to_key(compare)) sorts the list using the custom comparison.
  • ''.join(map(str, res)) concatenates the sorted numbers into a single string.

Using reduce()

This method combines the power of reduce() and a custom lambda function to perform the task in a concise manner. It sorts the numbers in descending order and then concatenates them using reduce().

Python
from functools import reduce

li = [23, 65, 98, 3, 4]

# combining the sorted elements into a single number using reduce() and lambda function
res = int(reduce(lambda x, y: x + y, map(str, sorted(li, key=lambda x: int(str(x)[0]), reverse=True))))
print(res)

Output
98654323

Explanation:

  • str(x)[0] converts each number to a string and takes the first digit.
  • key=lambda x: int(str(x)[0]) sorts the list li based on the first digit of each number.
  • map(str, ...) converts the sorted numbers to strings so they can be concatenated.
  • reduce(lambda x, y: x + y, ...) combines the sorted strings into a single string by concatenating them.
  • int(...) converts the concatenated string into an integer.
  • reverse=True sorts the numbers in descending order based on the first digit.


Next Article

Similar Reads