กำหนด list ของค่า เราสนใจว่าตำแหน่งไหนมีค่า Boolean อยู่เป็นช่วงต่อเนื่อง (contiguous) หมายถึงหลังเจอค่า TRUE จะมีค่า TRUE ต่อเนื่องจากตำแหน่งนั้นจนกว่าจะเจอ FALSE และในทำนองเดียวกันเมื่อเจอ FALSE จะมี FALSE ต่อเนื่องจนกว่าจะเจอ TRUE
ใช้ itertools
เราสามารถใช้ accumulate ร่วมกับ groupby จากโมดูล itertools ในตัวอย่างนี้ เราเอา list ที่กำหนดมาใช้ accumulate เพื่อติดตามค่าที่ถูกรวมด้วยฟังก์ชัน sum ค่าสุดท้ายใน list คือตำแหน่งสุดท้ายที่ list จบ
ตัวอย่าง
from itertools import accumulate, groupby
# List ที่กำหนด
listA = [False, True, True, False, False]
print("List ที่กำหนด : \n", listA)
# ใช้ accumulate
res = [0] + list(accumulate(sum(1 for x in y) for x, y in groupby(listA)))
# ผลลัพธ์
print("ตำแหน่งสำหรับช่วงค่าต่อเนื่อง:\n", res)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ −
List ที่กำหนด : [False, True, True, False, False] ตำแหน่งสำหรับช่วงค่าต่อเนื่อง: [0, 1, 3, 5]
ใช้ enumerate
ฟังก์ชัน enumerate ร่วมกับ zip ใช้ระบุตำแหน่งโดยเปรียบเทียบแต่ละสมาชิกกับตัวถัดไป หากไม่เท่ากัน ตำแหน่งใหม่ถือเป็นจุดเริ่มต้นของช่วงต่อเนื่อง
ตัวอย่าง
# List ที่กำหนด
listA = [False, True, True, False, False]
print("List ที่กำหนด : \n", listA)
# ใช้ enumerate
res = [e for e, (x, y) in enumerate(zip([2] + listA, listA + [2])) if x != y]
# ผลลัพธ์
print("ตำแหน่งสำหรับช่วงค่าต่อเนื่อง:\n", res)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ −
List ที่กำหนด : [False, True, True, False, False] ตำแหน่งสำหรับช่วงค่าต่อเนื่อง: [0, 1, 3, 5]