tôi có một danh sách như sau:Python: xác định chiều dài của chuỗi các mặt hàng bình đẳng trong danh sách
l = [0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,2,2,2]
Tôi muốn xác định độ dài của một chuỗi các mặt hàng như nhau, tức là để xem danh sách cho tôi muốn đầu ra là:
[(0, 6), (1, 6), (0, 4), (2, 3)]
(hoặc định dạng tương tự).
Tôi đã nghĩ đến việc sử dụng một số defaultdict
nhưng nó đếm số lần xuất hiện của mỗi mục và tích lũy nó cho toàn bộ danh sách, vì tôi không thể có nhiều hơn một khóa '0'.
Ngay bây giờ, giải pháp của tôi trông như thế này:
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
Tôi tự hỏi nếu có một cách pythonic hơn để làm điều này.
Bạn có thể tăng tốc độ mệnh đề 'else:' bằng cách thay thế những gì được hiển thị với hai dòng sau: 'cho i, _ trong liệt kê (l, 1): pass' theo sau là' return i'. – martineau