2024-09-28 17:27:03 发布
网友
我有这个密码:
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已排序:
x
>>> bisect.bisect(x, y) 2 >>> x[:bisect.bisect(x, y)] [5, 8] >>> x[bisect.bisect(x, y):] [12]
如果知道已排序,可以使用groupby from itertools:
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])将类似列表的对象显式转换为列表。你知道吗
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
由于
x
已排序:如果知道已排序,可以使用
groupby from itertools
:groupby
返回元组列表,格式为:(key_function_return_value, list-like iterable object)
。这就是为什么需要list(group[1])
将类似列表的对象显式转换为列表。你知道吗也许你可以用过滤器。你知道吗
相关问题 更多 >
编程相关推荐