Python—获取列表的索引,所有其他条目都从该索引中满足条件

Python—获取列表的索引,所有其他条目都从该索引中满足条件,python,arrays,numpy,boolean,Python,Arrays,Numpy,Boolean,假设我有一张清单 l = [12,13,14,10,13,14] 我想找到所有项都大于10的索引,在本例中,它是与13对应的索引4,作为这个属性的第一次出现 也许基于,如何用Python做到最好 我的想法是:为此创建一个bool列表 [a>10表示l中的a]由True和False作为序列组成,或者l>10以某种方式使用numpy生成一个数组?给你: [l.index(item) for item in l if not item>10][-1]+1 您可以在列表中反向迭代,并捕获第一个

假设我有一张清单

l = [12,13,14,10,13,14]
我想找到所有项都大于10的索引,在本例中,它是与13对应的索引4,作为这个属性的第一次出现

也许基于,如何用Python做到最好

我的想法是:为此创建一个bool列表 [a>10表示l中的a]由True和False作为序列组成,或者l>10以某种方式使用numpy生成一个数组?

给你:

[l.index(item) for item in l if not item>10][-1]+1

您可以在列表中反向迭代,并捕获第一个条件失败的索引。这可以防止出现多个值失败的问题

In [51]: l                                                                                  
Out[51]: [12, 13, 14, 10, 13, 14]

In [52]: next((len(l) - idx for idx, val in enumerate(l[::-1]) if val <= 10), None)         
Out[52]: 4

In [53]: l = [12, 13, 10, 20, 10, 15]                                                       

In [54]: next((len(l) - idx for idx, val in enumerate(l[::-1]) if val <= 10), None)         
Out[54]: 5

In [55]: l = [23, 55]                                                                       

In [56]: next((len(l) - idx for idx, val in enumerate(l[::-1]) if val <= 10), None)         

In [57]: 

 

注意列表的最后一个元素不满足条件的情况。i值将等于lenl,因为lenl不是列表的有效索引。您可以选择如何管理该特殊情况。

您可以从阵列的末尾开始:

def findStartOfMoreThan(l,limit):
    for i in range(len(l)-1, -1, -1):
        if l[i]<=limit :
            return i+1
    return (-1)
    
assert(findStartOfMoreThan([12,13,14,10,13,14],10) == 4)
assert(findStartOfMoreThan([12,13,14,10,13,14,15],10)==4)
assert(findStartOfMoreThan([0,12,13,14,10,13,14,15],10)==5)
assert(findStartOfMoreThan([0,12,13,14,10,13,14,15],13)==6)

最简单的解决方案是否定条件,以获得最后一个包含元素的索引。是否希望所有数字的索引都大于10?您希望的输出是什么?
def findStartOfMoreThan(l,limit):
    for i in range(len(l)-1, -1, -1):
        if l[i]<=limit :
            return i+1
    return (-1)
    
assert(findStartOfMoreThan([12,13,14,10,13,14],10) == 4)
assert(findStartOfMoreThan([12,13,14,10,13,14,15],10)==4)
assert(findStartOfMoreThan([0,12,13,14,10,13,14,15],10)==5)
assert(findStartOfMoreThan([0,12,13,14,10,13,14,15],13)==6)
l = np.array([12,13,14,10,13,14])
first_index = np.where(l<=10)[0][-1]+1 # yields the first index that satisfies the condition