Skip to content
Related Articles
Open in App
Not now

Related Articles

Python – Sort given list of strings by part the numeric part of string

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 23 Jan, 2023
Improve Article
Save Article

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))

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)


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!