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

10 投票
4 回答
20283 浏览
提问于 2025-04-17 06:09

我有一个算法方面的问题。

我有一串数字(小数)

1.22,3.2, 4.9,12.3.....and so on

我想找到一个比4稍大的最小数字……比如说,答案是4.9。

除了显而易见的解决办法(就是遍历这个列表,记录下比4大的最小数字),还有什么更“python风格”的方法呢?谢谢!

4 个回答

7

这是一个使用 filter 的绝佳场景。

>>> L = [1.22, 3.2, 4.9, 12.3]
>>> k = 4
>>> a = min(filter(lambda x: x > k, L))
>>> print(a)
4.9

你也可以使用列表推导式来实现:

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

虽然列表推导式乍一看似乎不太简单,但其实这是推荐的做法。一些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
23
min(x for x in my_list if x > 4)

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

9

二分查找是一种常用的方法来处理这个问题,但前提是列表必须是排好序的,正如之前的回答所提到的。

可以参考 这个链接,了解如何在一个已排序的列表中找到第一个大于特定值的数字。

还有 这个链接,它讲解了如何在一个已排序的列表中找到第一个大于某个阈值的值的索引。

如果你想了解一个可以帮你完成这个任务的模块,可以查看 这个链接

撰写回答