คำตอบนี้เป็นสิ่งที่ OP ควรถามคือสำรวจรายการเปรียบเทียบองค์ประกอบที่ต่อเนื่องกัน ( คำตอบSilentGhost ที่ยอดเยี่ยม) แต่ยังได้รับการสรุปสำหรับกลุ่มใด ๆ ( n-gram ): 2, 3, ... n:
zip(*(l[start:] for start in range(0, n)))
ตัวอย่าง:
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)))) # == []
คำอธิบาย:
l[start:] สร้างรายชื่อ aa / เครื่องกำเนิดเริ่มต้นจากดัชนี start
*listหรือ*generator: ผ่านองค์ประกอบทั้งหมดไปยังฟังก์ชั่นการปิดล้อมzipราวกับว่ามันถูกเขียนzip(elem1, elem2, ...)
บันทึก:
AFAIK รหัสนี้ขี้เกียจที่สุดเท่าที่จะทำได้ ไม่ผ่านการทดสอบ