Python - Filter rows without Space Strings
Given Matrix, extract rows in which Strings don't have spaces.
Examples:
Input: test_list = [["gfg is", "best"], ["gfg", "good"], ["gfg is cool"], ["love", "gfg"]]
Output: [['gfg', 'good'], ['love', 'gfg']]
Explanation: Both the lists have strings that don't have spaces.
Input: test_list = [["gfg is", "best"], ["gfg ", "good"], ["gfg is cool"], ["love", "gfg"]]
Output: [['love', 'gfg']]
Explanation: The list has strings that don't have spaces.
Method #1: Using list comprehension + any() + regex
In this, we check for no space in each string using regex, any() is used to check this for any string found with spaces, that row is not added.
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using list comprehension + any() + regex
import re
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = [row for row in test_list if not any(
bool(re.search(r"\s", ele)) for ele in row)]
# printing result
print("Filtered Rows : " + str(res))
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using list comprehension + any() + regex
import re
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = [row for row in test_list if not any(
bool(re.search(r"\s", ele)) for ele in row)]
# printing result
print("Filtered Rows : " + str(res))
Output
The original list is : [['gfg is', 'best'], ['gfg', 'good'], ['gfg is cool'], ['love', 'gfg']] Filtered Rows : [['gfg', 'good'], ['love', 'gfg']]
Complexity Analysis:
Time Complexity: O(N2), (loop * re.search())
Auxiliary Space: O(N)
Method #2 : Using filter() + lambda + any() + regex
In this, we perform task of filtering using filter() and lambda function, rest all the functionalities are performed alike the above method.
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using filter() + lambda + any() + regex
import re
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = list(filter(lambda row: not any(bool(re.search(r"\s", ele))
for ele in row), test_list))
# printing result
print("Filtered Rows : " + str(res))
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using filter() + lambda + any() + regex
import re
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = list(filter(lambda row: not any(bool(re.search(r"\s", ele))
for ele in row), test_list))
# printing result
print("Filtered Rows : " + str(res))
Output
The original list is : [['gfg is', 'best'], ['gfg', 'good'], ['gfg is cool'], ['love', 'gfg']] Filtered Rows : [['gfg', 'good'], ['love', 'gfg']]
Complexity Analysis:
Time Complexity: O(N2), for loop takes the time complexity of O(n) and the filter also takes O(n) so together the final complexity is O(n2),
Auxiliary Space: O(N), the size of array, so O(n)
Method #3 : Using join() and find() methods
In this method, we perform task of joining all the strings using join() method and then checking if there is a space between the string using find() method.
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = []
for i in test_list:
a = "".join(i)
if(a.find(" ") == -1):
res.append(i)
# printing result
print("Filtered Rows : " + str(res))
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = []
for i in test_list:
a = "".join(i)
if(a.find(" ") == -1):
res.append(i)
# printing result
print("Filtered Rows : " + str(res))
Output
The original list is : [['gfg is', 'best'], ['gfg', 'good'], ['gfg is cool'], ['love', 'gfg']] Filtered Rows : [['gfg', 'good'], ['love', 'gfg']]
Time Complexity: O(n*n)
Auxiliary Space: O(n)
Method #4:Using itertools.filterfalse() method
# Python3 code to demonstrate working of
# Filter rows without Space Strings
import itertools
import re
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = list(itertools.filterfalse(lambda row: any(bool(re.search(r"\s", ele))
for ele in row), test_list))
# printing result
print("Filtered Rows : " + str(res))
# Python3 code to demonstrate working of
# Filter rows without Space Strings
import itertools
import re
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using regex
# not including row if any string has space
res = list(itertools.filterfalse(lambda row: any(bool(re.search(r"\s", ele))
for ele in row), test_list))
# printing result
print("Filtered Rows : " + str(res))
Output
The original list is : [['gfg is', 'best'], ['gfg', 'good'], ['gfg is cool'], ['love', 'gfg']] Filtered Rows : [['gfg', 'good'], ['love', 'gfg']]
Time Complexity: O(N2)
Auxiliary Space: O(N)
Method #5: Here is a new approach using a list comprehension and the split and all() method:
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using list comprehension + split() method
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using the split() method
# not including row if any string has space
res = [row for row in test_list if all(ele.split() == [ele] for ele in row)]
# printing result
print("Filtered Rows : " + str(res))
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using list comprehension + split() method
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# checking for spaces using the split() method
# not including row if any string has space
res = [row for row in test_list if all(ele.split() == [ele] for ele in row)]
# printing result
print("Filtered Rows : " + str(res))
Output
The original list is : [['gfg is', 'best'], ['gfg', 'good'], ['gfg is cool'], ['love', 'gfg']] Filtered Rows : [['gfg', 'good'], ['love', 'gfg']]
Time Complexity: O(N2), loop * split() method
Auxiliary Space: O(N)
Method #6: Using nested loops and flag variable
Step by step approach:
- Initialize a list of lists called test_list with some test data.
- Print the original list using the print() function and string concatenation.
- Initialize an empty list called res to store the filtered rows.
- For each row in test_list, do the following:
- Initialize a flag variable called flag to True.
- For each element (ele) in the current row, do the following:
- Check if the element contains any spaces using the in keyword and the string " " as a parameter. If it does, set the flag variable to False and break out of the loop using the break keyword.
- If the flag variable is still True after checking all elements in the current row, append the current row to the res list.
- Print the filtered rows using the print() function and string concatenation.
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using nested loops and flag variable
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# removing rows containing space strings
res = []
for row in test_list:
flag = True
for ele in row:
if " " in ele:
flag = False
break
if flag:
res.append(row)
# printing result
print("Filtered Rows : " + str(res))
# Python3 code to demonstrate working of
# Filter rows without Space Strings
# Using nested loops and flag variable
# initializing list
test_list = [["gfg is", "best"], ["gfg", "good"],
["gfg is cool"], ["love", "gfg"]]
# printing original list
print("The original list is : " + str(test_list))
# removing rows containing space strings
res = []
for row in test_list:
flag = True
for ele in row:
if " " in ele:
flag = False
break
if flag:
res.append(row)
# printing result
print("Filtered Rows : " + str(res))
Output
The original list is : [['gfg is', 'best'], ['gfg', 'good'], ['gfg is cool'], ['love', 'gfg']] Filtered Rows : [['gfg', 'good'], ['love', 'gfg']]
Time complexity: O(n^2) (nested loop)
Auxiliary space: O(k) (where k is the length of the longest row)