इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो सूची में सभी एनाग्राम को समूहित करता है। पहले, आइए देखें कि एनाग्राम क्या हैं।
कोई भी दो स्ट्रिंग जिनमें अलग-अलग क्रम में समान वर्ण हों, उन्हें एनाग्राम के रूप में जाना जाता है।
समाधान में गोता लगाने से पहले, आइए एक उदाहरण देखें।
इनपुट
['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
आउटपुट
[['cat', 'tac'], ['dog', 'god'], ['fried', 'fired'], ['pat', 'tap']]
हम समस्या को दो भागों में तोड़ेंगे। पहले, हम एक फ़ंक्शन लिखेंगे जो जांचता है कि दो स्ट्रिंग एनाग्राम हैं या नहीं। एनाग्राम जांचने के लिए कोड लिखने के लिए नीचे दिए गए चरणों का पालन करें।
- स्ट्रिंग्स आरंभ करें।
- दोनों स्ट्रिंग्स को सॉर्ट करें।
- यदि दोनों सॉर्ट की गई स्ट्रिंग्स समान हैं तो True लौटाएं अन्यथा False।
उदाहरण
# दो स्ट्रिंग्स एनाग्राम हैं या नहीं जांचने के लिए सरल लैम्ब्डा फ़ंक्शन
are_anagrams = lambda x, y: str(sorted(x.lower())) == str(sorted(y.lower()))
# फ़ंक्शन कॉल करना
print(are_anagrams('cat', 'tac'))
print(are_anagrams('cat', 'Tac'))
print(are_anagrams('cat', 'dog'))
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम मिलेगा।
True True False
अब, हम जानते हैं कि दो स्ट्रिंग्स की जांच कैसे करें कि वे एनाग्राम हैं या नहीं। लेकिन, यह हमारी समस्या हल करने के लिए पर्याप्त नहीं है। हमें सूची से सभी एनाग्राम को उपसूचियों के रूप में समूहित (संग्रहीत) करने की आवश्यकता है।
हम इस समस्या को कैसे हल कर सकते हैं?
तत्वों को समूहित करने के लिए डिक्शनरी का उपयोग करना एक सर्वोत्तम अभ्यास है। हमारे पास संबंधित एनाग्राम के लिए एक ही कुंजी होगी। यदि आप पायथन में नए हैं तो यह थोड़ा भ्रमित करने वाला है। आइए देखते हैं कि हम जो चाहते हैं उसे प्राप्त करने के चरण।
- स्ट्रिंग्स की सूची आरंभ करें।
- एक खाली डिक्शनरी आरंभ करें।
- सूची पर पुनरावृति करें।
- स्ट्रिंग को सॉर्ट करें।
- जांचें कि यह डिक्शनरी में मौजूद है या नहीं।
- यदि यह डिक्शनरी में मौजूद है, तो स्ट्रिंग को इसकी सूची में जोड़ें।
- अन्यथा वर्तमान स्ट्रिंग सहित एक सूची के साथ कुंजी आरंभ करें ताकि एनाग्राम संग्रहीत किए जा सकें।
- डिक्शनरी के सभी मानों को सूची में प्रिंट करें।
उदाहरण
# स्ट्रिंग्स की सूची आरंभ करना
anagrams = ['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
# खाली डिक्ट आरंभ करना
grouped_anagrams = {}
# सभी एनाग्राम को समूहित करने के लिए सूची पर पुनरावृति
for string in anagrams:
# स्ट्रिंग को सॉर्ट करना
sorted_string = str(sorted(string))
# डिक्ट में स्ट्रिंग की जांच
if sorted_string in grouped_anagrams:
# स्ट्रिंग को समूह एनाग्राम में जोड़ना
grouped_anagrams[sorted_string].append(string)
else:
# वर्तमान स्ट्रिंग के साथ सूची आरंभ करना
grouped_anagrams[sorted_string] = [string]
# डिक्ट के मान प्रिंट करना (एनाग्राम समूह)
print(list(grouped_anagrams.values()))
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम मिलेगा।
[['dog', 'god'], ['pat', 'tap'], ['cat', 'tac'], ['fired', 'fried']]
निष्कर्ष
आप इस समस्या को अलग-अलग दृष्टिकोणों का उपयोग करके भी हल कर सकते हैं। defaultdict नामक एक डेटा संरचना है जो डिक्शनरी में कुंजी की जांच से बचने में मदद करती है। आप इसे एक्सप्लोर कर सकते हैं और कोड को तदनुसार बदल सकते हैं।
यदि ट्यूटोरियल में आपके कोई संदेह हैं, तो उन्हें टिप्पणी अनुभाग में उल्लेख करें।