Python में टपल्स की सूची में जांचना कि क्या सभी टपल्स में केवल एक ही अद्वितीय मान है (सभी तत्व समान), इसके लिए set() और all() का उपयोग किया जा सकता है।
समस्या
दिया गया: [(72, 72, 72), (72, 72), (72, 72)] - क्या सभी टपल्स में केवल 72 है?
सरल और पायथनिक तरीका
my_list = [(72, 72, 72), (72, 72), (72, 72)]
print("मूल सूची:", my_list)
# विधि 1: all() + set() - सबसे पायथनिक
result = all(len(set(t)) == 1 for t in my_list)
print(f"सभी टपल्स में समान तत्व? {result}") # True
# विधि 2: पहला तत्व लेकर बाकी से तुलना
first_val = my_list[0][0] if my_list else None
result2 = all(all(elem == first_val for elem in t) for t in my_list)
print(f"विधि 2: {result2}") # True
आउटपुट
मूल सूची: [(72, 72, 72), (72, 72), (72, 72)]
सभी टपल्स में समान तत्व? True
विधि 2: True
मूल लेख की विधि (फ्लैग वेरिएबल के साथ)
# मूल लेख का दृष्टिकोण (अधिक वर्बोज)
my_list = [(72, 72, 72), (72, 72), (72, 72)]
my_result = True
for sub in my_list:
flag = True
for element in sub:
if element != my_list[0][0]:
flag = False
break
if not flag:
my_result = False
break
if my_result:
print("सभी टपल्स में एक ही तत्व है")
else:
print("टपल्स में अलग-अलग तत्व हैं")
विविधताएं और किनारे के मामले
1. खाली सूची / खाली टपल्स
# खाली सूची
print(all(len(set(t)) == 1 for t in [])) # True (vacuously true)
# खाली टपल्स वाली सूची
print(all(len(set(t)) == 1 for t in [(), (), ()])) # False (len(set()) = 0)
# मिश्रित
print(all(len(set(t)) == 1 for t in [(1,1), (), (2,2)])) # False
2. कौन सा मान सामान्य है, यह भी जानना
def check_single_element_value(nested_list):
"""सभी टपल्स में समान तत्व हो तो वह मान लौटाएं, वरना None"""
if not nested_list:
return None
# पहला गैर-खाली टपल खोजें
first_val = None
for t in nested_list:
if t:
first_val = t[0]
break
if first_val is None:
return None # सभी टपल्स खाली हैं
# जांचें कि सभी तत्व first_val के बराबर हैं
if all(all(elem == first_val for elem in t) for t in nested_list):
return first_val
return None
print(check_single_element_value([(72, 72), (72,)])) # 72
print(check_single_element_value([(72, 72), (73,)])) # None
print(check_single_element_value([(1,), (1, 1), (1,)])) # 1
print(check_single_element_value([])) # None
3. NumPy के साथ (बड़े डेटा के लिए)
import numpy as np
# 2D सरणी में बदलें (यदि सभी उप-सूचियाँ समान लंबाई की हों)
arr = np.array([[72, 72, 72], [72, 72, 72], [72, 72, 72]])
# प्रत्येक पंक्ति के सभी तत्व समान?
row_uniform = np.all(arr == arr[:, 0:1], axis=1)
all_uniform = np.all(row_uniform)
print(f"NumPy: {all_uniform}") # True
# असमान लंबाई के लिए - ऑब्जेक्ट सरणी
arr_obj = np.array([(72, 72, 72), (72, 72), (72,)], dtype=object)
result = all(len(set(t)) == 1 for t in arr_obj)
print(f"ऑब्जेक्ट सरणी: {result}")
4. Counter का उपयोग (आवृत्ति गिनने के लिए)
from collections import Counter
# सभी टपल्स को मिलाकर गिनें
all_elements = [elem for t in my_list for elem in t]
counts = Counter(all_elements)
print(f"तत्व आवृत्ति: {counts}") # Counter({72: 7})
# केवल एक अद्वितीय तत्व?
print(f"एक ही तत्व? {len(counts) == 1}")
सारांश
| विधि | पठनीयता | प्रदर्शन | खाली टपल्स हैंडलिंग |
|---|---|---|---|
all(len(set(t))==1 for t in lst) | उच्च | अच्छा | खाली टपल्स → False |
all(all(e==first for e in t) for t in lst) | मध्यम | अच्छा | खाली टपल्स → True |
| फ्लैग वेरिएबल (मूल) | कम | धीमा | मैन्युअल हैंडलिंग |
| NumPy | मध्यम | सबसे तेज़ (बड़े डेटा) | आकार निश्चित होना चाहिए |