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

• Difficulty Level : Easy
• Last Updated : 23 Jan, 2023

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