Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में दी गई सूची से एनाग्राम समूहित करना

इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो सूची में सभी एनाग्राम को समूहित करता है। पहले, आइए देखें कि एनाग्राम क्या हैं।

कोई भी दो स्ट्रिंग जिनमें अलग-अलग क्रम में समान वर्ण हों, उन्हें एनाग्राम के रूप में जाना जाता है।

समाधान में गोता लगाने से पहले, आइए एक उदाहरण देखें।

इनपुट

['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 नामक एक डेटा संरचना है जो डिक्शनरी में कुंजी की जांच से बचने में मदद करती है। आप इसे एक्सप्लोर कर सकते हैं और कोड को तदनुसार बदल सकते हैं।

यदि ट्यूटोरियल में आपके कोई संदेह हैं, तो उन्हें टिप्पणी अनुभाग में उल्लेख करें।

  1. - पायथन में दी गई सूची की सूची से केवल धनात्मक तत्व प्राप्त करें

    सूचियाँ नेस्टेड हो सकती हैं, मतलब एक सूची के तत्व स्वयं सूचियाँ होते हैं। इस लेख में हम देखेंगे कि सूची की सूची से केवल धनात्मक संख्याएं कैसे निकाली जाएं। परिणाम में एक नई सूची होगी जिसमें धनात्मक संख्याओं वाली नेस्टेड सूचियाँ होंगी। for in के साथ यहां हम केवल फॉर लूप का उपयोग करके सूची में तत्वों

  1. - Python सूची से बाइग्राम निर्माण

    एक बाइग्राम दिए गए वाक्य से हर दो लगातार शब्दों से शब्दों की एक जोड़ी बनाकर बनाया जाता है। Python में, इस तकनीक का उपयोग टेक्स्ट एनालिटिक्स में भारी मात्रा में किया जाता है। नीचे हम देखते हैं कि इसे कैसे प्राप्त किया जाए इस पर दो दृष्टिकोण। enumerate और split का उपयोग करना इन दो विधियों का उपयोग करक

  1. - पायथन में ग्रुप एनाग्राम्स

    मान लीजिए, हमारे पास स्ट्रिंग्स का एक समूह है। हमें एनाग्राम को एक साथ ग्रुप करना है। इसलिए यदि [eat, tea, tan, ate, nat, bat] है, तो ग्रुप [[ate,eat,tea],[nat,tan],[bat]] होंगे।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -res को मैप के रूप में परिभाषित करेंस्ट्रिंग सरणी में i के लिएx := i के सॉर