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]

更新於:10-7 月-2020

290 次瀏覽

開拓你的 職業

完成課程即可獲得認證

開始
廣告
© . All rights reserved.