मुझे पूर्णांक की एक सूची मिली है और मैं डुप्लिकेट के संगत ब्लॉक की पहचान करने में सक्षम होना चाहता हूं: यानी, मैं डुप्लिक की ऑर्डर-संरक्षित सूची बनाना चाहता हूं जहां प्रत्येक डुप्लिकेट (int_in_question, घटनाओं की संख्या) शामिल है।सूची में लगातार डुप्लिकेट की पहचान करने के लिए सबसे महत्वपूर्ण तरीका क्या है?
उदाहरण के लिए, अगर मैं की तरह एक सूची है: मैं परिणाम होना चाहता हूँ
[0, 0, 0, 3, 3, 2, 5, 2, 6, 6]
:
[(0, 3), (3, 2), (2, 1), (5, 1), (2, 1), (6, 2)]
मैं एक तक- और के साथ ऐसा करने का एक काफी आसान तरीका है लूप, एक अस्थायी, और एक काउंटर:
result_list = []
current = source_list[0]
count = 0
for value in source_list:
if value == current:
count += 1
else:
result_list.append((current, count))
current = value
count = 1
result_list.append((current, count))
लेकिन मुझे वास्तव में पाइथन की func पसंद है tional प्रोग्रामिंग idioms, और मैं एक साधारण जेनरेटर अभिव्यक्ति के साथ ऐसा करने में सक्षम होना चाहता हूँ। हालांकि जेनरेटर के साथ काम करते समय मुझे उप-गणना रखना मुश्किल लगता है। मुझे लगता है कि एक दो-चरणीय प्रक्रिया मुझे वहां ले सकती है, लेकिन अभी के लिए मैं फंस गया हूँ।
क्या ऐसा करने के लिए विशेष रूप से जेनरेटर के साथ एक विशेष रूप से सुरुचिपूर्ण/पायथनिक तरीका है?
संदर्भ के लिए इस प्रक्रिया को कहा जाता है: http://en.wikipedia.org/wiki/Run-length_encoding –