我有一个列表,我想找到值1的起始和结束索引。
labels=[0,0,0,1,1,1,0,0,1,1]
1的索引为[3,5]
和[8,9]
有没有什么有效的方法可以做到这一点?我试过numpy index(),但是它对我不起作用。使用它,我可以找到第一个或最后一个1,但是不能找到中间的1。这就是我所尝试的。
[labels.index(1),len(labels)-labels[::-1].index(1)-1]
这样得到的是[3,9]
,但我希望得到连续1的索引,即[3,5]
和[8,9]
4条答案
按热度按时间bf1o4zei1#
一个选项是使用
diff
获取每个拉伸的开始,并在填充后与0进行比较,以确保标签以0开始和结束:输出:
作为列表:
46qrfjad2#
@mozway建议的方法可能更适合大型列表,但是,对于这样一个小数据集,这种方法要快得多(如果这很重要的话):
输出:
5hcedyr03#
一种方法是使用itertools compress,groupby和count。“获取索引1,按连续索引分组,并找到组中的第一个和最后一个索引”。
vu8f3i0k4#
对于numpy和python初学者: