Python – Sort given list of strings by part the numeric part of string
Given a list of strings. The task is to sort the list by the numeric part of the string.
Examples:
Input : test_list = [“Gfg34”, “is67”, “be3st”, “f23or”, “ge9eks”]
Output : [‘be3st’, ‘ge9eks’, ‘f23or’, ‘Gfg34’, ‘is67’]
Explanation : 3 < 9 < 23 < 34 < 67, numbers extracted from strings.Input : test_list = [“Gfg4”, “is67”, “be3st”, “f23or”, “ge9eks”]
Output : [‘be3st’, ‘Gfg4’, ‘ge9eks’, ‘f23or’, ‘is67’]
Explanation : 3 < 4 < 9 < 23 < 67, numbers extracted from strings.
Method #1 : Using sort() + re.findall()
In this, we perform the task of sorting using sort(), the explicit function is used to extract numbers using findall().
Python3
# Python3 code to demonstrate working of # Sort Strings on numerical substrings # Using sort() + findall() import re # helper function to perform sort def num_sort(test_string): return list ( map ( int , re.findall(r '\d+' , test_string)))[ 0 ] # initializing list test_list = [ "Gfg34" , "is67" , "be3st" , "f23or" , "ge9eks" ] # printing original list print ( "The original list is : " + str (test_list)) # calling function test_list.sort(key = num_sort) # printing result print ( "Strings after numerical Sort : " + str (test_list)) |
Output:
The original list is : [‘Gfg34’, ‘is67’, ‘be3st’, ‘f23or’, ‘ge9eks’]
Strings after numerical Sort : [‘be3st’, ‘ge9eks’, ‘f23or’, ‘Gfg34’, ‘is67’]
Time Complexity: O(nlogn)
Auxiliary Space: O(n)
Method #2 : Using sort() + lambda + findall()
In this, we perform a similar function, but the difference being we use lambda function rather than an external function to perform the task of sorting.
Python3
# Python3 code to demonstrate working of # Sort Strings on numerical substrings # Using sort() + lambda + findall() import re # initializing list test_list = [ "Gfg34" , "is67" , "be3st" , "f23or" , "ge9eks" ] # printing original list print ( "The original list is : " + str (test_list)) # findall() getting all integers. # conversion to integers using map() test_list.sort(key = lambda test_string : list ( map ( int , re.findall(r '\d+' , test_string)))[ 0 ]) # printing result print ( "Strings after numerical Sort : " + str (test_list)) |
Output:
The original list is : [‘Gfg34’, ‘is67’, ‘be3st’, ‘f23or’, ‘ge9eks’]
Strings after numerical Sort : [‘be3st’, ‘ge9eks’, ‘f23or’, ‘Gfg34’, ‘is67’]
Time Complexity: O(nlogn)
Auxiliary Space: O(n)
Method #3 : Using extend(),sort() and index() methods
Python3
# Python3 code to demonstrate working of # Sort Strings on numerical substrings # initializing list test_list = [ "Gfg34" , "is67" , "be3st" , "f23or" , "ge9eks" ] # printing original list print ( "The original list is : " + str (test_list)) x = [] dig = "0123456789" for i in test_list: p = "" for j in i: if j in dig: p + = j x.append( int (p)) y = [] y.extend(x) x.sort() res = [] for i in x: res.append(test_list[y.index(i)]) # printing result print ( "Strings after numerical Sort : " + str (res)) |
The original list is : ['Gfg34', 'is67', 'be3st', 'f23or', 'ge9eks'] Strings after numerical Sort : ['be3st', 'ge9eks', 'f23or', 'Gfg34', 'is67']
Time Complexity : O(NlogN)
Auxiliary Space : O(N)
Please Login to comment...