Python - 布林連續範圍
給定一個值列表,我們希望知道布林值以連續列表的形式出現在哪個位置。也就是說,在我們遇到一個為 TRUE 的值後,從該位置到找到 FALSE 值之前,將有一個連續的 true 值。類似地,當找到一個 FALSE 時,將會有一個連續的 FALSE 值,直到找到 TRUE。
透過 itertools
我們可以使用來自 itertools 模組的 accumulate 和 groupby。在此示例中,我們獲取一個給定的列表,然後應用 accumulate 函式來跟蹤使用 sum 函式組合在一起的值。列表中的最後一個值是給定列表結束的最後一個位置。
示例
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]
使用 enumerate
enumerate 函式與 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]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP