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 次浏览

开拓你的 职业

完成课程即可获得认证

开始
广告