Open In App

Python – Sort String by Custom Integer Substrings

Last Updated : 28 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a list of strings, sort strings by the occurrence of substring from list.

Input : test_list = [“Good at 4”, “Wake at 7”, “Work till 6”, “Sleep at 11”], subord_list = [“11”, “7”, “4”, “6”] 
Output : [‘Sleep at 11’, ‘Wake at 7’, ‘Good at 4’, ‘Work till 6’] 
Explanation : Strings sorted by substring presence.

Input : test_list = [“Good at 9”, “Wake at 7”, “Work till 6”, “Sleep at 11”], subord_list = [“11”, “7”, “9”, “6”] 
Output : [‘Sleep at 11’, ‘Wake at 7’, ‘Good at 9’, ‘Work till 6’] 
Explanation : Strings sorted by substring presence. 
 

Method #1 : Using sorted() + zip() + lambda + regex()

The combination of above functions can be used to solve this problem. In this, we perform task of sorting by substring using regex() and sorted(), zip() is used to produce end result.

Python3




# Python3 code to demonstrate working of
# Sort String by Custom Substrings
# Using sorted() + zip() + lambda + regex()
import re
 
# initializing list
test_list = ["Good at 4", "Wake at 7", "Work till 6", "Sleep at 11"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing substring list
subord_list = ["6", "7", "4", "11"]
 
 
# creating inverse mapping with index
temp_dict = {val: key for key, val in enumerate(subord_list)}
 
# custom sorting
temp_list = sorted([[ele, temp_dict[re.search("(\d+)$", ele).group()]] \
                for ele in test_list], key = lambda x: x[1])
# compiling result
res = [ele for ele in list(zip(*temp_list))[0]]
         
# printing result
print("The sorted list : " + str(res))


Output

The original list : ['Good at 4', 'Wake at 7', 'Work till 6', 'Sleep at 11']
The sorted list : ['Work till 6', 'Wake at 7', 'Good at 4', 'Sleep at 11']

Time Complexity: O(nlogn), where n is the elements of list
Auxiliary Space: O(n), where n is the size of list

Method #2 : Using sorted() + zip() + comparator + regex()

This is yet another way in which this task can be performed. In this similar functionality is used as above method, difference is that comparator function is fed to sorted() rather than lambda to sort.

Python3




# Python3 code to demonstrate working of
# Sort String by Custom Substrings
# Using sorted() + comparator + regex()
import re
 
# helper function to solve problem
def hlper_fnc(ele):
    temp = re.search("(\d+)$", ele).group()
    return temp_dict[temp] if temp in temp_dict else int(temp)
 
# initializing list
test_list = ["Good at 4", "Wake at 7", "Work till 6", "Sleep at 11"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing substring list
subord_list = ["6", "7", "4", "11"]
 
# creating inverse mapping with index
temp_dict = {val: key for key, val in enumerate(test_list)}
 
# sorting using comparator
test_list.sort(key = lambda ele: hlper_fnc(ele))
         
# printing result
print("The sorted list : " + str(test_list))


Output

The original list : ['Good at 4', 'Wake at 7', 'Work till 6', 'Sleep at 11']
The sorted list : ['Good at 4', 'Work till 6', 'Wake at 7', 'Sleep at 11']

The Time and Space Complexity for all the methods are the same:

Time Complexity: O(n)

Space Complexity: O(n)

Method 3 : using a dictionary+  using the sorted() method  +re module 

step by step explanations:

First, a list of strings called “test_list” is initialized with four values.
The original list is printed using the print() function.
A list of substrings called “subord_list” is initialized with the same number of values as the original list.
An empty dictionary called “order_dict” is initialized to store the mappings of substrings to orders.
A for loop is used to iterate through the indices of the “subord_list”. In each iteration, the substring at the current index is added as a key to the “order_dict”, and its corresponding index is added as the value.
The sorted() function is used to sort the “test_list” based on the values of the mappings in the “order_dict”. The key argument of the sorted() function is set to a lambda function that extracts the substring at the end of each string using regular expression and gets its corresponding index from the “order_dict”.
The sorted list is printed using the print() function.

 

Python3




# Python3 code to demonstrate working of
# Sort String by Custom Substrings
# Using dictionary and sorted()
import re
 
# initializing list
test_list = ["Good at 4", "Wake at 7", "Work till 6", "Sleep at 11"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing substring list
subord_list = ["6", "7", "4", "11"]
 
# creating dictionary to store mappings of substrings to orders
order_dict = {}
for i in range(len(subord_list)):
    order_dict[subord_list[i]] = i
 
# sorting based on the values of the mappings using sorted()
test_list = sorted(test_list, key=lambda x: order_dict[re.search("(\d+)$", x).group()])
 
# printing result
print("The sorted list : " + str(test_list))


Output

The original list : ['Good at 4', 'Wake at 7', 'Work till 6', 'Sleep at 11']
The sorted list : ['Work till 6', 'Wake at 7', 'Good at 4', 'Sleep at 11']

The time complexity of this approach is O(nlogn) due to the use of sorted().

Auxiliary space complexity is O(n) due to the use of the order_dict dictionary.



Similar Reads

Python Program to sort rows of a matrix by custom element count
Given Matrix, the following program shows how to sort rows of a matrix by the count of presence of numbers from a specified list. Input : test_list = [[4, 5, 1, 7], [6, 5], [9, 8, 2], [7, 1]], cus_list = [4, 5, 7] Output : [[9, 8, 2], [6, 5], [7, 1], [4, 5, 1, 7]] Explanation : 0 < 1 = 1 < 3 is order of custom elements count.Input : test_list
5 min read
Python - Sort list of Single Item dictionaries according to custom ordering
Given single item dictionaries list and keys ordering list, perform sort of dictionary according to custom keys. Input : test_list1 = [{'is' : 4}, {"Gfg" : 10}, {"Best" : 1}], test_list2 = ["Gfg", "is", "Best"] Output : [{'Gfg': 10}, {'is': 4}, {'Best': 1}] Explanation : By list ordering, dictionaries list get sorted. Input : test_list1 = [{"Gfg" :
4 min read
Sort a Tuple of Custom Objects by Properties in Python
We are given a tuple of custom objects and our task is to sort a tuple of custom objects by properties in Python and print the result. In this article, we will see how to sort a tuple of custom objects by properties in Python. Example: Input: CustomObject("Alice", 30), CustomObject("Bob", 25), CustomObject("Charlie", 35)Output: Bob 25 Alice 30 Char
3 min read
Python - Custom length tuples from String
Given a String, extract tuple list, with each tuple being of custom length, delimited using comma. Input : test_str = "6 6 7, 3 4, 2" Output : [(6, 6, 7), (3, 4), (2, )] Explanation : The customs lengths being 3, 2, 1 have been converted to tuple list. Input : test_str = "7, 7, 4" Output : [(7, ), (7, ), (4, )] Explanation : All elements are of len
4 min read
Python - Custom Consecutive character repetition in String
Given a String, repeat characters consecutively by number mapped in dictionary. Input : test_str = 'Geeks4Geeks', test_dict = {"G" : 3, "e" : 1, "4" : 3, "k" : 5, "s" : 3} Output : GGGeekkkkksss444GGGeekkkkksss Explanation : Each letter repeated as per value in dictionary.Input : test_str = 'Geeks4Geeks', test_dict = {"G" : 3, "e" : 1, "4" : 3, "k"
4 min read
Python - Split a String by Custom Lengths
Given a String, perform split of strings on the basis of custom lengths. Input : test_str = 'geeksforgeeks', cus_lens = [4, 3, 2, 3, 1] Output : ['geek', 'sfo', 'rg', 'eek', 's'] Explanation : Strings separated by custom lengths.Input : test_str = 'geeksforgeeks', cus_lens = [10, 3] Output : ['geeksforge', 'eks'] Explanation : Strings separated by
2 min read
Python program to print the substrings that are prefix of the given string
Given a string, print all the possible substrings which are also the prefix of the given string. Examples: Input : ababc Output : a, ab, aba, abab, ababc, a, ab Input : abdabc Output : a, ab, abd, abda, abdab, abdabc, a, ab Approach: We use two variables: start and end to keep track of the current substring and follow the below conditions until sta
3 min read
Python | Get matching substrings in string
The testing of a single substring in a string has been discussed many times. But sometimes, we have a list of potential substrings and check which ones occur in a target string as a substring. Let's discuss certain ways in which this task can be performed. Method #1: Using list comprehension Using list comprehension is the naive and brute force met
6 min read
Python | Get all substrings of given string
There are many problems in which we require to get all substrings of a string. This particular utility is very popular in competitive programming and having shorthands to solve this problem can always be handy. Let's discuss certain ways in which this problem can be solved. Method #1 : Using list comprehension + string slicing The combination of li
7 min read
Python - Replace Substrings from String List
Sometimes while working with data, we can have a problem in which we need to perform replace substrings with the mapped string to form a short form of some terms. This kind of problem can have applications in many domains involving data. Let's discuss certain ways in which this task can be performed. Method #1 : Using loop + replace() + enumerate()
7 min read
three90RightbarBannerImg