Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - ช่วงบูลีนต่อเนื่อง


จากรายการค่า เราสนใจที่จะทราบว่าตำแหน่งใดเป็นค่าบูลีนที่แสดงเป็นรายการที่ต่อเนื่องกัน ซึ่งหมายความว่าหลังจากที่เราพบค่าที่เป็น 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]