我有一个数字列表,我想知道第一个数字和某个数字之后的数字

时间:2019-01-09 09:58:07

标签: python

假设我有以下列表,其中x = [4,6,8,10,12,13,14]为例,我想例如知道数字10和12的索引,因为它们在前后11

3 个答案:

答案 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_leftbisect.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)