如何select最小号。来自 > 0 的列表?
How to select the minimum no. from a list that is > 0?
如何select最小号。来自 > 0?
的列表
我试过:
- 使用列表理解来剔除非正数
- 然后在过滤器列表
上执行min()
即
>>> 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
如何select最小号。来自 > 0?
的列表我试过:
- 使用列表理解来剔除非正数
- 然后在过滤器列表 上执行
min()
即
>>> 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