Given List of elements, perform sorting on basis of digits of numbers.
Input : test_list = [434, 211, 12, 3] Output : [12, 211, 3, 434] Explanation : 3 < 12, still later in list, as initial digit, 1 < 3. Hence sorted by digits rather than number. Input : test_list = [534, 211, 12, 7] Output : [12, 211, 534, 7] Explanation : 7 < 534, still later in list, as initial digit, 5 < 7. Hence sorted by digits rather than number.
Method #1 : Using map() + str() + ljust() + sorted()
In this, the list elements are converted into string using map() and str(), ljust() is used to append constant character to make each number equal length. Then sort is performed using sorted().
# Python3 code to demonstrate working of # Sort List by Digits # Using map() + str() + ljust() + sorted() # initializing list test_list = [ 434 , 211 , 12 , 54 , 3 ]
# printing original list print ( "The original list is : " + str (test_list))
# converting elements to string temp1 = map ( str , test_list)
# getting max length max_len = max ( map ( len , temp1))
# performing sort operation res = sorted (test_list, key = lambda idx : ( str (idx).ljust(max_len, 'a' )))
# printing result print ( "List after sorting : " + str (res))
|
The original list is : [434, 211, 12, 54, 3] List after sorting : [12, 211, 3, 434, 54]
Time Complexity: O(nlogn) where n is the number of elements in the list “test_list”.
Auxiliary Space: O(1), additional space is not needed.
Method #2 : Using list comprehension + sorted() + lambda
In this, we as parameter to sorted(), pass a list of digits. Performing sort according to that gives desired results.
# Python3 code to demonstrate working of # Sort List by Digits # Using list comprehension + sorted() + lambda # initializing list test_list = [ 434 , 211 , 12 , 54 , 3 ]
# printing original list print ( "The original list is : " + str (test_list))
# performing sort operation # converting number to list of Digits res = sorted (test_list, key = lambda ele: [ int (j) for j in str (ele)])
# printing result print ( "List after sorting : " + str (res))
|
The original list is : [434, 211, 12, 54, 3] List after sorting : [12, 211, 3, 434, 54]