如何select最小号。来自 > 0 的列表?

How to select the minimum no. from a list that is > 0?

如何select最小号。来自 > 0?

的列表

我试过:

>>> x = (-3155, 611, 1284)
>>> min_x_more_than_0 = min([i for i in x if i > 0])
>>> min_x_more_than_0
611

必须有一种 better/faster 方法可以做到这一点。想象一下 X 的长度是 1,000,000,000 遍历列表是相当低效的。

如果数据是有序的,您可以使用二进制搜索在 O(log n) 中执行此操作。只需 bisect 在 0 处并索引相邻元素。

如果数据是无序的,你不能比 O(n) 做得更好,因为无论如何你都必须检查每个元素。

您可以使用 numpy 将整个计算推送到 C 代码中:

>>> import numpy as np
>>> a = np.array(x)
>>> a[a > 0].min()
611