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