我从算法的角度来看有一个问题.我有一个数字列表(浮点数)
1.22,3.2, 4.9,12.3.....and so on
Run Code Online (Sandbox Code Playgroud)
而且我想找到大于(比如说)4的最小数字.所以答案是4.9但除了明显的解决方案..(通过列表迭代并保持最小数量大于k的轨道)什么是"pythonic方式" " 去做这个.谢谢
Sve*_*ach 18
min(x for x in my_list if x > 4)
Run Code Online (Sandbox Code Playgroud)
二进制搜索将是处理此问题的标准方法,但只有在列表被排序时,如前面的答案所指出的那样.
请参阅Python二进制搜索类函数,以查找排序列表中大于特定值的第一个数字
而在Python中,你如何找到的第一个值比在排序列表中的阈值的指数?
讨论为您执行此操作的模块:http://docs.python.org/library/bisect.html
这是过滤器的完美场景.
>>> L = [1.22, 3.2, 4.9, 12.3]
>>> k = 4
>>> a = min(filter(lambda x: x > k, L))
>>> print(a)
4.9
Run Code Online (Sandbox Code Playgroud)
您还可以使用列表推导:
>>> L = [1.22, 3.2, 4.9, 12.3]
>>> k = 4
>>> a = min([element for element in L if element > k])
>>> print(a)
4.9
Run Code Online (Sandbox Code Playgroud)
尽管列表理解在第一个视图中似乎不那么简单,但建议使用它.根据一些Python开发人员的说法,filter不应该使用.
一个生成器表达式,因为它不会在内存中创建列表,甚至更好:
>>> L = [1.22, 3.2, 4.9, 12.3]
>>> k = 4
>>> a = min(element for element in L if element > k)
>>> print(a)
4.9
Run Code Online (Sandbox Code Playgroud)