忽略列表中唯一的True值的最准确方法,可在列表/数组中发现一系列True值

时间:2019-01-22 17:08:06

标签: python python-3.x

基于应用于数据帧中变量的条件,我在列表中具有一系列True / False值。关注范围的索引是列表的一部分 (连续约15-25 True个值)处有一系列真实值。列表中也有随机的True值。请参阅下面的突出部分。我需要提取True部分的开始和结束索引。 忽略唯一的True行。数据模式将始终保持不变,因此该程序将对我的其他数据集有效;但这无关紧要,因为该问题是针对以下数据的。

actual_data = [
        True, True, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, True, False, False,  

   True, True, True, True, True, True, True, True, True, True, 
   True, True, True, True, True, True, True, True, True, True, True, True,  

        False, False, False, False, False, False, False, True, False,
        False, True, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, True, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, False, False, False, False, False, False, False, False, False, False,
        False, True
    ]

因此,感兴趣列表中的一部分在上面的列表中是actual_data[83:105]。我需要一种方法来识别该区域的起点和终点。

1 个答案:

答案 0 :(得分:1)

我将使用计数器并遍历枚举列表。对于遇到的每个真值,将1加到计数器上。对于每个错误,请检查计数器是否在一定范围内(例如15-25)。如果它在范围内,则counter - indexindex并为您提供开始索引和结束索引。如果不在此范围内,请将计数器重置为0并继续循环。

以下内容已通过您的数据测试,并返回(83, 105)。根据您的需要进行任何更改。我建议添加所需的最小和最大范围作为附加参数,以提高灵活性。

def extract_range(my_list):
    counter = 0
    for index, value in enumerate(my_list):
        if value == True:
            counter += 1
        else:
            if 15 <= counter <= 25:
                return (index - counter, index)
            else:
                counter = 0
    return (-1, -1)