Python में नेस्टेड सूची (मैट्रिक्स) से उन पंक्तियों को निकालना जिनकी लंबाई दी गई मान (K) के बराबर हो।
उदाहरण
my_list = [[22, 4, 63, 7], [24, 4, 85], [95], [2, 55, 4, 7, 91], [5, 31, 1]]
print("मूल मैट्रिक्स:", my_list)
my_key = 4
print(f"लक्ष्य लंबाई K = {my_key}")
# विधि 1: List Comprehension (मूल लेख)
my_result = [sub for sub in my_list if len(sub) == my_key]
print("परिणाम:", my_result)
# विधि 2: filter() फ़ंक्शन
my_result2 = list(filter(lambda row: len(row) == my_key, my_list))
print("परिणाम (filter):", my_result2)
# विधि 3: लूप
my_result3 = []
for row in my_list:
if len(row) == my_key:
my_result3.append(row)
print("परिणाम (लूप):", my_result3)
आउटपुट
मूल मैट्रिक्स: [[22, 4, 63, 7], [24, 4, 85], [95], [2, 55, 4, 7, 91], [5, 31, 1]]
लक्ष्य लंबाई K = 4
परिणाम: [[22, 4, 63, 7]]
पंक्ति लंबाई विश्लेषण
# सभी पंक्तियों की लंबाई देखें
for i, row in enumerate(my_list):
print(f"पंक्ति {i}: {row} → लंबाई = {len(row)}")
आउटपुट
पंक्ति 0: [22, 4, 63, 7] → लंबाई = 4 ← मैच
पंक्ति 1: [24, 4, 85] → लंबाई = 3
पंक्ति 2: [95] → लंबाई = 1
पंक्ति 3: [2, 55, 4, 7, 91] → लंबाई = 5
पंक्ति 4: [5, 31, 1] → लंबाई = 3
फंक्शन के रूप में
def filter_rows_by_length(matrix, k):
"""लंबाई k वाली पंक्तियाँ लौटाएं"""
if k < 0:
raise ValueError("K ऋणात्मक नहीं हो सकता")
return [row for row in matrix if len(row) == k]
# उपयोग
matrix = [[1,2], [3,4,5], [6], [7,8,9,10], [11,12]]
print(filter_rows_by_length(matrix, 2)) # [[1, 2], [11, 12]]
print(filter_rows_by_length(matrix, 3)) # [[3, 4, 5]]
print(filter_rows_by_length(matrix, 4)) # [[7, 8, 9, 10]]
print(filter_rows_by_length(matrix, 1)) # [[6]]
विविधताएं
1. लंबाई की रेंज (min_len से max_len तक)
def filter_rows_by_length_range(matrix, min_len, max_len=None):
"""लंबाई रेंज में पंक्तियाँ"""
if max_len is None:
max_len = float('inf')
return [row for row in matrix if min_len <= len(row) <= max_len]
print("लंबाई 2-4:", filter_rows_by_length_range(matrix, 2, 4))
# [[1, 2], [3, 4, 5], [7, 8, 9, 10], [11, 12]]
2. एकाधिक विशिष्ट लंबाईयां
def filter_rows_by_lengths(matrix, lengths):
"""निर्दिष्ट लंबाईयों वाली पंक्तियाँ"""
length_set = set(lengths)
return [row for row in matrix if len(row) in length_set]
print("लंबाई 2 या 4:", filter_rows_by_lengths(matrix, [2, 4]))
# [[1, 2], [7, 8, 9, 10], [11, 12]]
3. Pandas DataFrame में (समान लंबाई की पंक्तियों के लिए)
import pandas as pd
import numpy as np
# असमान लंबाई के लिए DataFrame नहीं बना सकते सीधे
# लेकिन Series of lists बना सकते हैं
s = pd.Series(my_list)
print("Series:\n", s)
# लंबाई के अनुसार फ़िल्टर
mask = s.apply(len) == my_key
filtered = s[mask]
print(f"\nलंबाई {my_key} वाली पंक्तियाँ:\n", filtered.tolist())
4. NumPy रैग्ड सरणी (object dtype)
import numpy as np
arr = np.array(my_list, dtype=object)
lengths = np.array([len(row) for row in arr])
mask = lengths == my_key
filtered = arr[mask]
print("NumPy परिणाम:", filtered.tolist())
व्यावहारिक उपयोग
- डेटा सफाई: अपेक्षित कॉलम संख्या वाली पंक्तियाँ रखना
- सीक्वेंस डेटा: निश्चित लंबाई के सीक्वेंस चुनना
- बैच प्रोसेसिंग: समान आकार के बैच बनाना