में बराबर वस्तुओं के अनुक्रम की लंबाई निर्धारित मैं इस प्रकार एक सूची है:पायथन: सूची
l = [0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,2,2,2]
मैं बराबर मदों की एक अनुक्रम की लंबाई, दी गई सूची में मैं उत्पादन चाहते हैं के लिए यानी निर्धारित करने के लिए चाहते हैं होने के लिए:
[(0, 6), (1, 6), (0, 4), (2, 3)]
(या एक समान प्रारूप)।
मैंने defaultdict
का उपयोग करने के बारे में सोचा लेकिन यह प्रत्येक आइटम की घटनाओं की गणना करता है और इसे पूरी सूची के लिए जमा करता है, क्योंकि मेरे पास एक से अधिक कुंजी '0' नहीं हो सकती है।
अभी, मेरी समाधान इस तरह दिखता है:
out = []
cnt = 0
last_x = l[0]
for x in l:
if x == last_x:
cnt += 1
else:
out.append((last_x, cnt))
cnt = 1
last_x = x
out.append((last_x, cnt))
print out
मैं अगर वहाँ ऐसा करने का एक और अधिक pythonic तरीका है सोच रहा हूँ।
आप निम्न दो पंक्तियों के साथ दिखाए गए स्थान को बदलकर 'अन्यथा' की तुलना कर सकते हैं: 'i, _ में enumerate (l, 1): pass' के बाद' वापसी i'। – martineau