如何选择最小数量.从列表> 0?

alv*_*vas 2 python list-comprehension list minimum

如何选择最小数量.从列表> 0?

我试过了:

  • 使用列表理解来清除非正面的
  • 然后min()在筛选器列表上执行a

>>> x = (-3155, 611, 1284)
>>> min_x_more_than_0 = min([i for i in x if i > 0])
>>> min_x_more_than_0
611
Run Code Online (Sandbox Code Playgroud)

必须有更好/更快的方法来做到这一点.想象一下,X的长度是1,000,000,000,在列表中循环是相当低效的.

wim*_*wim 5

如果订购了数据,则可以使用二进制搜索在O(log n)中执行此操作.仅为bisect0并索引相邻元素.

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

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

>>> import numpy as np
>>> a = np.array(x)
>>> a[a > 0].min()
611
Run Code Online (Sandbox Code Playgroud)