Thursday, December 26, 2024
Google search engine
HomeLanguagesPython – Sort given list of strings by part the numeric part...

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


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#4: Using list comprehension

Python3




import re
 
test_list = ["Gfg34", "is67", "be3st", "f23or", "ge9eks"]
print("The original list is : " + str(test_list))
substrings = [int(x) for string in test_list for x in re.findall(r'\d+', string)]
substrings.sort()
res = [string for x in substrings for string in test_list if int(re.findall(r'\d+', string)[0]) == x]
print("Strings after numerical Sort : " + str(res))
#This code is contributed by Vinay Pinjala.


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 #5: Using isdigit() method

  1. Initialize the input list of strings test_list.
  2. Use the sorted() function to sort the list based on a key function. The key function is defined using a lambda function that takes each string x in the list and performs the following steps:
    a. Use filter() to extract only the digits from the string.
    b. Use join() to concatenate the digits into a single string.
    c. Use int() to convert the resulting string of digits to an integer.
    d. Return the integer as the sorting key.
  3. Assign the sorted list to the variable sorted_list.
  4. Print the sorted list using the print() function.

Python3




#Initailizing the list
test_list = ["Gfg34", "is67", "be3st", "f23or", "ge9eks"]
 
#printing original list before sorting
print("The original list is:",test_list)
 
#sorting the list using the isdigit() method
sorted_list = sorted(test_list, key=lambda x: int(''.join(filter(str.isdigit, x))))
 
#printing the result. MB
print("List after numeric sort is:",sorted_list)


Output

The original list is: ['Gfg34', 'is67', 'be3st', 'f23or', 'ge9eks']
List after numeric sort is: ['be3st', 'ge9eks', 'f23or', 'Gfg34', 'is67']

Time Complexity : O(NlogN)
Auxiliary Space : O(N)

RELATED ARTICLES

Most Popular

Recent Comments