在列表中找到大于x的第一个索引的最Pythonic方法是什么?
例如,用
list = [0.5, 0.3, 0.9, 0.8]
Run Code Online (Sandbox Code Playgroud)
功能
f(list, 0.7)
Run Code Online (Sandbox Code Playgroud)
会回来的
2.
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 93
next(x[0] for x in enumerate(L) if x[1] > 0.7)
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 22
如果列表是排序的,那么bisect_left(alist, value)对于大型列表来说比这更快next(i for i, x in enumerate(alist) if x >= value).
fly*_*ire 14
filter(lambda x: x>.7, seq)[0]
Run Code Online (Sandbox Code Playgroud)
gho*_*g74 10
>>> alist= [0.5, 0.3, 0.9, 0.8]
>>> [ n for n,i in enumerate(alist) if i>0.7 ][0]
2
Run Code Online (Sandbox Code Playgroud)
for index, elem in enumerate(elements):
if elem > reference:
return index
raise ValueError("Nothing Found")
Run Code Online (Sandbox Code Playgroud)
1) NUMPY ARGWHERE,一般列表
如果您乐于使用 numpy(在此处作为np导入),那么以下内容将适用于一般列表(已排序或未排序):
np.argwhere(np.array(searchlist)>x)[0]
Run Code Online (Sandbox Code Playgroud)
或者如果您需要作为整数索引的答案:
np.argwhere(np.array(searchlist)>x)[0][0]
Run Code Online (Sandbox Code Playgroud)
2) NUMPY SEARCHSORTED,排序列表(在列表中搜索列表非常有效)
但是,如果您的搜索列表已排序,则使用函数np.searchsorted 会更简洁、更好:
np.searchsorted(searchlist,x)
Run Code Online (Sandbox Code Playgroud)
使用此函数的好处在于,除了搜索单个值 x 外,您还可以搜索列表 x,即您还可以返回搜索值列表的索引列表 [x1,x2,x3.. xn] ,(在这种情况下,它相对于列表理解非常有效)。