假设我有以下列表,其中x = [4,6,8,10,12,13,14]为例,我想例如知道数字10和12的索引,因为它们在前后11
答案 0 :(得分:1)
考虑列表x
已排序,您可以使用bisect模块以最快的方式实现所需的目标。
例如:
>>> import bisect
>>> x = [4,6,8,10,12,13,14]
>>> bisect.bisect_left(x, 11)
4
>>> x[4]
12
bisect模块通过在已排序列表的顶部实现基本的二进制搜索来工作。
您可以使用bisect.bisect_left
或bisect.bisect
。
如果条目重复,则Left会导致您获得最左边的索引,而right(或没有任何指定)将返回最右边的插入点:
>>> x = [1,2,2,3]
>>> bisect.bisect(x, 2)
3
>>> bisect.bisect_left(x, 2)
1
答案 1 :(得分:0)
bind -n C-s set-window-option synchronize-panes
答案 2 :(得分:0)
@naivepredictor答案的不同版本:
from operator import itemgetter
x = [4,6,8,10,12,13,14]
given_val = 11
after_val = min([(i, n) for i, n in enumerate(x) if n > given_val], key=itemgetter(1))
before_val = max([(i, n) for i, n in enumerate(x) if n < given_val], key=itemgetter(1))
print(after_val) # (4, 12)
print(before_val) # (3, 10)