मान लीजिए हमारे पास एक न्यूमेरिक स्ट्रिंग s है जिसमें कुछ अंक हैं। अंक कई बार आ सकते हैं। हमें कुछ जोड़े (अंक, काउंट) लौटाने हैं जो दर्शाते हैं कि s में कौन सा अंक लगातार कितनी बार आया है। इस समस्या को हल करने के लिए हम itertools लाइब्रेरी के अंतर्गत आने वाले groupby() फंक्शन का उपयोग कर सकते हैं। यह एक इटरेटर ऑब्जेक्ट लौटाएगा जिसमें प्रत्येक आइटम पहले स्थान पर होगा और दूसरे स्थान पर दूसरा groupby ऑब्जेक्ट होगा। हमें प्रत्येक जोड़े के लिए groupby ऑब्जेक्ट्स की संख्या गिननी होगी।
उदाहरण के लिए, यदि इनपुट s = "11522226551" है, तो आउटपुट [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)] होगा क्योंकि शुरुआत में 1 दो बार मौजूद है, फिर सिंगल 5 फिर चार 2s और इसी तरह।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- it := s के लिए groupby फंक्शन कॉल करें
- ret := एक नई सूची
- प्रत्येक जोड़े (digit, gp) के लिए it में, करें
- (digit और gp की सूची की लंबाई) को ret में डालें
- ret लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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)]