从列表中查找高于和低于特定值的值

时间:2015-12-07 18:45:49

标签: python

我有这段代码:

x = [5, 8, 12] 
y = 9
lower = [_ for _ in x if _ < y][-1]
higher = [_ for _ in x if _ > y][0]
print lower, higher

这会找到一个较低的值,以及一个高于列表x中给定输入(y)的值。 x已排序。

有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

由于x已排序:

>>> bisect.bisect(x, y)
2
>>> x[:bisect.bisect(x, y)]
[5, 8]
>>> x[bisect.bisect(x, y):]
[12]

答案 1 :(得分:0)

也许你可以使用过滤器。

x = [5, 8, 12] 
y = 9
lower = filter(lambda n:n<y, x)
higher = filter(lambda n:n>y, x)
print lower, higher

答案 2 :(得分:0)

如果您知道它已排序,则可以使用groupby from itertools

>>> x = [5, 8, 12]
>>> y = 9
>>> from itertools import groupby
>>> [list(group[1]) for group in groupby(x, lambda c: c < y)]
[[5, 8], [12]]

groupby返回一个元组列表,格式为:(key_function_return_value, list-like iterable object)。这就是为什么需要list(group[1])才能将类似列表的对象明确地转换为列表。