मान लीजिए कि हमारे पास एक संख्यात्मक स्ट्रिंग है जिसमें कुछ अंक हैं। अंक कई बार हो सकते हैं। हमें कुछ जोड़े (अंक, गिनती) वापस करना है, यह दर्शाता है कि कौन सा अंक लगातार कितनी बार आया है। इस समस्या को हल करने के लिए हम groupby() फ़ंक्शन का उपयोग कर सकते हैं जो itertools लाइब्रेरी के अंतर्गत आता है। यह एक इटरेटर ऑब्जेक्ट को अंदर लौटाएगा जिसमें प्रत्येक आइटम पहले स्थान पर होगा और दूसरा समूह दूसरे स्थान पर होगा। हमें प्रत्येक जोड़ी के लिए समूह द्वारा वस्तुओं की संख्या गिननी होगी।
इसलिए, यदि इनपुट s ="11522226551" जैसा है, तो आउटपुट [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), ( 1, 1)] क्योंकि शुरुआत में 1 दो बार मौजूद होता है, फिर सिंगल 5 फिर चार 2एस और इसी तरह।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- it :=s के लिए groupby फ़ंक्शन को कॉल करें
- रिट:=एक नई सूची
- इसमें प्रत्येक जोड़ी (अंक, जीपी) के लिए, करें
- रिट में (जीपी की सूची का अंक और लंबाई) डालें
- रिटर्न रिटर्न
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
from itertools import groupby def solve(s): it = groupby(s) ret = [] for digit, gp in it: ret.append((int(digit), len(list(gp)))) return ret s = "11522226551" print(solve(s))
इनपुट
"11522226551"
आउटपुट
[(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)]