算法(Python):找到大于k的最小数

Moh*_*hit 8 python algorithm

我从算法的角度来看有一个问题.我有一个数字列表(浮点数)

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)

  • @SvenMarnach - 我并没有说你的答案有什么问题(你真的没有什么比这更好的了); 只是向提问者指出这只是语法糖,而不是比迭代更神奇的东西. (3认同)

DNA*_*DNA 8

二进制搜索将是处理此问题的标准方法,但只有在列表被排序时,如前面的答案所指出的那样.

请参阅Python二进制搜索类函数,以查找排序列表中大于特定值的第一个数字

在Python中,你如何找到的第一个值比在排序列表中的阈值的指数?

讨论为您执行此操作的模块:http://docs.python.org/library/bisect.html


Mar*_*oma 7

这是过滤器的完美场景.

>>> 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)