Điều này trả lời những gì OP nên hỏi , tức là duyệt qua một danh sách so sánh các yếu tố liên tiếp ( câu trả lời SilentGhost xuất sắc ), nhưng được khái quát cho bất kỳ nhóm nào ( n-gram ): 2, 3, ... n
:
zip(*(l[start:] for start in range(0, n)))
Ví dụ:
l = range(0, 4) # [0, 1, 2, 3]
list(zip(*(l[start:] for start in range(0, 2)))) # == [(0, 1), (1, 2), (2, 3)]
list(zip(*(l[start:] for start in range(0, 3)))) # == [(0, 1, 2), (1, 2, 3)]
list(zip(*(l[start:] for start in range(0, 4)))) # == [(0, 1, 2, 3)]
list(zip(*(l[start:] for start in range(0, 5)))) # == []
Giải thích:
l[start:]
tạo danh sách aa / trình tạo bắt đầu từ chỉ mục start
*list
hoặc *generator
: chuyển tất cả các phần tử cho hàm kèm theo zip
như thể nó được viếtzip(elem1, elem2, ...)
Ghi chú:
AFAIK, mã này là lười biếng như nó có thể được. Không được kiểm tra.