Python在给定条件的情况下查找列表的索引

时间:2016-01-07 11:00:48

标签: python list python-2.7 numpy indices

我有一个清单,让我们说:

list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0]

我想找到此列表的最小和最大索引,其中list_A> 0。

即。在上面的例子中,它将是3和7。

对于单调增加的其他列表,我一直在使用np.searchsorted,如np.searchsorted(list,[0.5,1.0])来查找列表分别为between 0.5 and 1.0的索引。

但是这种情况完全不同,np.searchsorted在这里不起作用,或者它可能以我不知道的方式发挥作用!

3 个答案:

答案 0 :(得分:5)

使用其indixs过滤压缩列表,并取最小值和最大值:

>>> list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0]
>>> filtered_lst = [(x,y) for x,y in enumerate(list_A) if y > 0]
>>> max(filtered_lst)
(7, 1.0)
>>> min(filtered_lst)
(3, 1.0)

如果您只需要索引,请解压缩返回的值:

>>> maX,_ =  max(filtered_lst)
>>> maX
7

答案 1 :(得分:2)

另一种方法是使用next()

list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0]

print(next(idx for idx, item in enumerate(list_A) if item>0))
print(next(len(list_A)-1-idx for idx, item in enumerate(list_A[::-1]) if item>0))

<强>输出

3
7

使用next()查找列表> 0中的第一项是一种优雅的解决方案。

使用此方法查找列表> 0中的最后项目比较棘手。我使用next()进行迭代,并使用> 0在反向列表中找到第一个list_A[::-1]。然后,我使用len(list)-1将生成的索引转换为正确的索引,方法是将其从len(list)-1-idx中减去。

答案 2 :(得分:0)

您可以使用np.where函数返回所有elements > 0

的索引
In [116]: list_A = [0,0,0,1.0,2.0,3.0,2.0,1.0,0,0,0]

In [117]: arr = np.array(list_A)

In [118]: indx = np.where(arr > 0)[0]

In [119]: mini = indx[0]

In [120]: mini
Out[120]: 3

In [121]: maxi = indx[-1]

In [122]: maxi
Out[122]: 7