Sử dụng groupby, nó yếu tố nhóm theo giá trị:
from itertools import groupby
group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
print max(group, key=lambda k: len(list(k[1])))
Và đây là mã trong hành động:
>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
>>> print max(group, key=lambda k: len(list(k[1])))
(2, <itertools._grouper object at 0xb779f1cc>)
>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
>>> print max(group, key=lambda k: len(list(k[1])))
(3, <itertools._grouper object at 0xb7df95ec>)
Từ tài liệu python:
Các hoạt động của groupby() tương tự vào bộ lọc uniq trong Unix. Nó tạo bảng phân hoặc nhóm mới mỗi thời điểm đó giá trị của hàm then chốt thay đổi
# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
Nếu bạn cũng muốn các chỉ số của thời gian lâu nhất bạn có thể làm như sau:
group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
result = []
index = 0
for k, g in group:
length = len(list(g))
result.append((k, length, index))
index += length
print max(result, key=lambda a:a[1])
Có vẻ như bạn đang tìm kiếm lần chạy dài nhất trong danh sách; bạn có thể muốn chỉnh sửa câu hỏi của mình để làm rõ điều đó. – las3rjock
Cụ thể là lần chạy dài nhất của mỗi số – Sparr
Có Sparr đúng. Có cách nào để làm điều này nhưng cũng ghi lại các chỉ số mà chạy dài nhất bắt đầu? – hekevintran