Python में नेस्टेड सूची (स्ट्रिंग्स की सूची की सूची) से उन पंक्तियों को फ़िल्टर करना जिनमें कोई भी स्ट्रिंग स्पेस नहीं रखती। इसके लिए रेगुलर एक्सप्रेशन और any()/all() का उपयोग किया जाता है।
समस्या
दिया गया: [["python is", "fun"], ["python", "good"], ["python is cool"], ["love", "python"]]
निकालें: वे पंक्तियाँ जहां किसी भी स्ट्रिंग में स्पेस न हो।
उदाहरण
import re
my_list = [["python is", "fun"], ["python", "good"], ["python is cool"], ["love", "python"]]
print("मूल सूची:", my_list)
# विधि 1: re.search + any + not (मूल लेख)
my_result = [
row for row in my_list
if not any(bool(re.search(r"\s", element)) for element in row)
]
print("परिणाम (re + any):", my_result)
# विधि 2: str.isspace() या ' ' in string (सरल, तेज़)
my_result2 = [
row for row in my_list
if not any(' ' in element for element in row)
]
print("परिणाम (' ' in):", my_result2)
# विधि 3: all() + str.isalpha() या कस्टम जांच
# यदि केवल अल्फान्यूमेरिक बिना स्पेस चाहिए
my_result3 = [
row for row in my_list
if all(element.replace(' ', '').isalnum() and ' ' not in element for element in row)
]
print("परिणाम (isalnum + no space):", my_result3)
आउटपुट
मूल सूची: [['python is', 'fun'], ['python', 'good'], ['python is cool'], ['love', 'python']]
परिणाम (re + any): [['python', 'good'], ['love', 'python']]
परिणाम (' ' in): [['python', 'good'], ['love', 'python']]
परिणाम (isalnum + no space): [['python', 'good'], ['love', 'python']]
व्याख्या
| पंक्ति | स्ट्रिंग्स | स्पेस है? | शामिल? |
|---|---|---|---|
| ["python is", "fun"] | "python is" (स्पेस), "fun" | हां | नहीं |
| ["python", "good"] | "python", "good" | नहीं | हां |
| ["python is cool"] | "python is cool" (स्पेस) | हां | नहीं |
| ["love", "python"] | "love", "python" | नहीं | हां |
रेगुलर एक्सप्रेशन विवरण
r"\s": कोई भी व्हाइटस्पेस कैरेक्टर (स्पेस, टैब, न्यूलाइन, आदि)r" ": केवल स्पेस कैरेक्टरre.search(): स्ट्रिंग में कहीं भी पैटर्न खोजता हैbool(): मैच ऑब्जेक्ट को बूलियन में बदलता है
फंक्शन के रूप में
def filter_rows_without_spaces(nested_list, check_all_whitespace=True):
"""
उन पंक्तियों को फ़िल्टर करें जिनमें कोई स्पेस/व्हाइटस्पेस न हो
Args:
nested_list: स्ट्रिंग्स की सूची की सूची
check_all_whitespace: True=कोई भी व्हाइटस्पेस (\s), False=केवल स्पेस (' ')
"""
if check_all_whitespace:
pattern = r"\s"
checker = lambda s: bool(re.search(pattern, s))
else:
checker = lambda s: ' ' in s
return [row for row in nested_list if not any(checker(elem) for elem in row)]
# उपयोग
data = [["python is", "fun"], ["python", "good"], ["python is cool"], ["love", "python"]]
print("कोई व्हाइटस्पेस नहीं:", filter_rows_without_spaces(data, True))
print("केवल स्पेस नहीं:", filter_rows_without_spaces(data, False))
# टैब, न्यूलाइन टेस्ट
data2 = [["hello\tworld"], ["hello\nworld"], ["hello world"], ["helloworld"]]
print("व्हाइटस्पेस टेस्ट:", filter_rows_without_spaces(data2, True)) # [['helloworld']]
print("स्पेस टेस्ट:", filter_rows_without_spaces(data2, False)) # [['hello\tworld'], ['hello\nworld'], ['helloworld']]
Pandas DataFrame में उपयोग
import pandas as pd
df = pd.DataFrame({
'text1': ['python is', 'python', 'python is cool', 'love'],
'text2': ['fun', 'good', None, 'python']
})
print("DataFrame:\n", df)
# किसी भी कॉलम में स्पेस वाली पंक्तियाँ हटाएं
mask = df.applymap(lambda x: isinstance(x, str) and ' ' not in x).all(axis=1)
filtered = df[mask]
print("\nकोई स्पेस नहीं वाली पंक्तियाँ:\n", filtered)
विविधताएं
1. कम से कम एक स्ट्रिंग बिना स्पेस वाली पंक्तियाँ रखें
# कम से कम एक एलिमेंट बिना स्पेस
at_least_one = [row for row in my_list if any(' ' not in elem for elem in row)]
print("कम से कम एक बिना स्पेस:", at_least_one)
# सभी पंक्तियाँ क्योंकि प्रत्येक में कम से कम एक बिना-स्पेस स्ट्रिंग है
2. विशिष्ट व्हाइटस्पेस कैरेक्टर्स जांचें
import string
# केवल स्पेस और टैब
whitespace_chars = ' \t'
result = [row for row in my_list if not any(c in elem for elem in row for c in whitespace_chars)]
# string.whitespace में सभी: ' \t\n\r\x0b\x0c'
result_all = [row for row in my_list if not any(c in elem for elem in row for c in string.whitespace)]