GIven Strings List and character list, extract all strings, having all characters from character list.
Input : test_list = [“Geeks”, “Gfg”, “Geeksforgeeks”, “free”], chr_list = [ ‘f’, ‘r’, ‘e’]
Output : [‘free’, “Geeksforgeeks”]
Explanation : Only “free” and “Geeksforgeeks” contains all ‘f’, ‘r’ and ‘e’.Input : test_list = [“Geeks”, “Gfg”, “Geeksforgeeks”, “free”], chr_list = [‘x’]
Output : []
Explanation : No word contains ‘x’.
Method #1 : Using loop
In this, we iterate for all elements from list, and check if all are present in particular string, if yes, then that string is appended to result.
# Python3 code to demonstrate working of # Strings with all List characters # Using loop # initializing list test_list = [ "Geeks" , "Gfg" , "Geeksforgeeks" , "free" ]
# printing original list print ( "The original list is : " + str (test_list))
# initializing char_list chr_list = [ 'g' , 'f' ]
res_list = []
for sub in test_list:
res = True
for ele in chr_list:
# check if any element is not present
if ele not in sub:
res = False
break
if res:
res_list.append(sub)
# printing results print ( "Filtered Strings : " + str (res_list))
|
The original list is : ['Geeks', 'Gfg', 'Geeksforgeeks', 'free'] Filtered Strings : ['Gfg', 'Geeksforgeeks']
Time Complexity: O(n*n), where n is the length of the input list.
Auxiliary Space: O(n) additional space of size n is created where n is the number of elements in the list “test_list”.
Method #2 : Using all() + list comprehension
In this, we check for all characters presence using all(), and if checks out, String is appended into result. Iteration part done in list comprehension as one-liner.
# Python3 code to demonstrate working of # Strings with all List characters # Using all() + list comprehension # initializing list test_list = [ "Geeks" , "Gfg" , "Geeksforgeeks" , "free" ]
# printing original list print ( "The original list is : " + str (test_list))
# initializing char_list chr_list = [ 'g' , 'f' ]
# using all() to check containment of all characters res_list = [sub for sub in test_list if all (ele in sub for ele in chr_list)]
# printing results print ( "Filtered Strings : " + str (res_list))
|
The original list is : ['Geeks', 'Gfg', 'Geeksforgeeks', 'free'] Filtered Strings : ['Gfg', 'Geeksforgeeks']
Method 3: Using the set and all functions.
Step by step approach:
- Initialize the original list of strings.
- Initialize the list of characters to be checked for containment.
- Create an empty list to store the filtered strings.
- Convert the list of characters to be checked for containment into a set.
- Use a list comprehension to filter the strings that contain all the characters in the set.
- Print the original list and the filtered strings list.
# initializing list test_list = [ "Geeks" , "Gfg" , "Geeksforgeeks" , "free" ]
# printing original list print ( "The original list is : " + str (test_list))
# initializing char_list chr_list = [ 'g' , 'f' ]
# initializing filtered strings list res_list = []
# convert the list of characters to be checked for containment into a set chr_set = set (chr_list)
# use a list comprehension to filter the strings that contain all the characters in the set res_list = [sub for sub in test_list if chr_set.issubset( set (sub.lower()))]
# printing results print ( "Filtered Strings : " + str (res_list))
|
The original list is : ['Geeks', 'Gfg', 'Geeksforgeeks', 'free'] Filtered Strings : ['Gfg', 'Geeksforgeeks']
Time complexity: O(n*m), where n is the number of strings in the original list and m is the length of the characters to be checked for containment.
Auxiliary space: O(k), where k is the number of strings that pass the filter.
Method 4: Use the filter() function and lambda function
Converting the list of characters to lowercase for case-insensitive matching using filter() function with a lambda function to filter the strings
# initializing list test_list = [ "Geeks" , "Gfg" , "Geeksforgeeks" , "free" ]
# printing original list print ( "The original list is : " + str (test_list))
# initializing char_list chr_list = [ 'g' , 'f' ]
chr_list_lower = [c.lower() for c in chr_list]
res_list = list ( filter ( lambda x: all (c in x.
lower() for c in chr_list_lower), test_list))
# printing results print ( "Filtered Strings : " + str (res_list))
|
The original list is : ['Geeks', 'Gfg', 'Geeksforgeeks', 'free'] Filtered Strings : ['Gfg', 'Geeksforgeeks']
The time complexity of this approach is O(n * m), where n is the length of the test_list and m is the maximum length of a string in the test_list.
The auxiliary space complexity is O(k), where k is the length of chr_list.