একটি ভ্যালু লিস্ট দেওয়া থাকলে, আমরা জানতে চাই বুলিয়ান ভ্যালুগুলো কোন পজিশনে কন্টিগুয়াস (contiguous)ভাবে আছে। অর্থাৎ, TRUE পাওয়ার পর থেকে FALSE পাওয়া পর্যন্ত TRUEই থাকবে, এবং FALSE পাওয়ার পর থেকে TRUE পাওয়া পর্যন্ত FALSEই থাকবে।
itertools মডিউল থেকে accumulate এবং groupby ব্যবহার করে। accumulate ফাংশন sum দিয়ে গ্রুপ করা ভ্যালুগুলো ট্র্যাক করে। লিস্টের শেষ ভ্যালু হলো কন্টিগুয়াস রেঞ্জের শেষ পজিশন।
from itertools import accumulate, groupby
listA = [False, True, True, False, False]
print("Given list : \n", listA)
res = [0] + list(accumulate(sum(1 for x in y) for x, y in groupby(listA)))
print("Positions for Range of contiguous values:\n", res)
Given list : [False, True, True, False, False] Positions for Range of contiguous values: [0, 1, 3, 5]
enumerate এবং zip ফাংশন ব্যবহার করে প্রতিটি উপাদানকে পরবর্তীটির সাথে তুলনা করা হয়। যদি ভিন্ন হয়, তবে নতুন পজিশন কন্টিগুয়াস রেঞ্জের শুরু বলে ধরা হয়।
listA = [False, True, True, False, False]
print("Given list : \n", listA)
res = [e for e, (x, y) in enumerate(zip([2] + listA, listA + [2])) if x != y]
print("Positions for Range of contiguous values:\n", res)
Given list : [False, True, True, False, False] Positions for Range of contiguous values: [0, 1, 3, 5]