基于应用于数据帧中变量的条件,我在列表中具有一系列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]
。我需要一种方法来识别该区域的起点和终点。
答案 0 :(得分:1)
我将使用计数器并遍历枚举列表。对于遇到的每个真值,将1加到计数器上。对于每个错误,请检查计数器是否在一定范围内(例如15-25)。如果它在范围内,则counter - index
和index
并为您提供开始索引和结束索引。如果不在此范围内,请将计数器重置为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)