在给定条件的情况下查找列表的最小和最大索引
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
中找到 last 项,使用此方法比较棘手。我使用 next()
遍历并使用 list_A[::-1]
在反向列表中找到 first 项 > 0
。然后,我使用 len(list)-1-idx
.
从 len(list)-1
中减去它,将生成的索引转换为正确的索引
您可以使用 np.where
函数来 return 所有 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
我有一个列表,比方说:
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
中找到 last 项,使用此方法比较棘手。我使用 next()
遍历并使用 list_A[::-1]
在反向列表中找到 first 项 > 0
。然后,我使用 len(list)-1-idx
.
len(list)-1
中减去它,将生成的索引转换为正确的索引
您可以使用 np.where
函数来 return 所有 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