इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो सभी एनाग्राम को एक सूची में समूहित करता है। सबसे पहले, आइए देखें कि विपर्ययण क्या हैं? ।
कोई भी दो तार जिनका एक ही वर्ण भिन्न क्रम में होता है, विपर्ययण कहलाते हैं।
समाधान में गोता लगाने से पहले, आइए एक उदाहरण देखें।
इनपुट
['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
आउटपुट
[['cat', 'tac'], ['dog', 'god'], ['fried', 'fired'], ['pat', 'tap']]
हम समस्या को दो टुकड़ों में तोड़ देंगे। सबसे पहले, हम एक फ़ंक्शन लिखेंगे जो जांचता है कि दो तार विपर्यय हैं या नहीं। विपर्यय की जाँच करने के लिए कोड लिखने के लिए नीचे दिए गए चरणों का पालन करें।
- स्ट्रिंग को इनिशियलाइज़ करें।
- दोनों तारों को क्रमबद्ध करें।
- यदि दोनों क्रमबद्ध स्ट्रिंग समान हैं तो सत्य return लौटाएं और गलत ।
उदाहरण
# simple lambda function to check whether two strings are anagrams or not
are_anagrams = lambda x, y: str(sorted(x.lower())) == str(sorted(y.lower()))
# calling the function
print(are_anagrams('cat', 'tac'))
print(are_anagrams('cat', 'Tac'))
print(are_anagrams('cat', 'dog')) आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।
True True False
अब, हम जानते हैं कि दो तारों की जाँच कैसे की जाती है कि वे विपर्यय हैं या नहीं। लेकिन, यह हमारी समस्या का समाधान करने के लिए पर्याप्त नहीं है। हमें सूची से सभी विपर्यय को उप-सूचियों के रूप में समूहित (संग्रहित) करने की आवश्यकता है।
हम समस्या का समाधान कैसे कर सकते हैं?
तत्वों को समूहबद्ध करने के लिए शब्दकोशों का उपयोग करना सबसे अच्छा अभ्यास है। संबंधित विपर्यय के लिए हमारे पास एक ही कुंजी होगी। यदि आप पायथन के लिए नए हैं तो यह थोड़ा भ्रमित करने वाला है। आइए देखें कि हम जो चाहते हैं उसे हासिल करने के लिए कदम उठाएं।
- स्ट्रिंग की सूची प्रारंभ करें।
- खाली शब्दकोश प्रारंभ करें।
- सूची में पुनरावृति करें।
- स्ट्रिंग को क्रमबद्ध करें।
- जांचें कि यह शब्दकोश में मौजूद है या नहीं।
-
- यदि यह शब्दकोश में मौजूद है, तो स्ट्रिंग को उसकी सूची में जोड़ें।
- अन्यथा एनाग्राम को स्टोर करने के लिए मौजूदा स्ट्रिंग सहित सूची के साथ कुंजी को इनिशियलाइज़ करें।
- शब्दकोश के सभी मानों को एक सूची में प्रिंट करें।
उदाहरण
# initialzing a list of strings
anagrams = ['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
# initializing an empty dict
grouped_anagrams = {}
# iterating over the list to group all anagrams
for string in anagrams:
# sorting the string
sorted_string = str(sorted(string))
# checking the string in dict
if sorted_string in grouped_anagrams:
# adding the string to the group anagrams
grouped_anagrams[sorted_string].append(string)
else:
# initializing a list with current string
grouped_anagrams[sorted_string] = [string]
# printing the values of the dict (anagram groups)
print(list(grouped_anagrams.values())) आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।
[['dog', 'god'], ['pat', 'tap'], ['cat', 'tac'], ['fired', 'fried']]
निष्कर्ष
आप विभिन्न तरीकों का उपयोग करके भी समस्या का समाधान कर सकते हैं। defaultdict . नामक एक डेटा संरचना है जो आपको शब्दकोश में कुंजी की जाँच से बचने में मदद करता है। आप इसे एक्सप्लोर कर सकते हैं और तदनुसार कोड बदल सकते हैं।
यदि आपको ट्यूटोरियल में कोई संदेह है, तो टिप्पणी अनुभाग में उनका उल्लेख करें।