簡體   English   中英

在給定條件的情況下查找列表的最小和最大索引

[英]Find the minimum and maximum indices of a list given a condition

我有一個清單,比方說:

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在這里不起作用,或者它可能以我不知道的方式起作用!

用索引過濾壓縮列表並取最小值和最大值:

>>> 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

另一種方法是使用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()遍歷並使用list_A[::-1]在反向列表中找到第一個> 0的項目。 然后,我使用len(list)-1-idxlen(list)-1中減去它,將生成的索引轉換為正確的索引。

您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM