从列表中查找高于或低于某个值的值

2024-09-28 17:27:03 发布

您现在位置: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)的值进行排序。你知道吗

有没有更好的办法?你知道吗


Tags: in密码列表forif排序lowerprint
3条回答

由于x已排序:

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

如果知道已排序,可以使用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])将类似列表的对象显式转换为列表。你知道吗

也许你可以用过滤器。你知道吗

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

相关问题 更多 >