如何获得下一个最小值到python提供的值?有内置功能吗?
>>>num_list=[1,2,3,4]
>>> min(num_list)
1
>>> max(num_list)
4
我怎样才能找到倒数第二个最低的3或倒数第二个最大的2?预期结果分别为2和3。
TL; DR要么min(n for n in my_list if n>lower_bound)
或max(n for n in my_list if n<upper_bound)
查找立即最小值或立即最大值的更快的替代方法是numpy
>>> import numpy as np
>>> np.random.seed(10)
>>> a = np.random.random(10000)
>>> a[a>0.7].min()
0.69999533217645671
>>> a[a<0.7].max()
0.70003449227846715
如果您不习惯使用numpy
机器,并且只想处理一份清单
>>> a = list(a)
然后您可以使用min
和max
内置函数以及生成器表达式
>>> min(n for n in a if n>0.7)
0.69999533217645671
>>> max(n for n in a if n<0.7)
0.70003449227846715
>>>
使用列表当然可以得到相同的结果,但是要注意性能上的差异:使用ipython
和%timeit
获取时序,numpy
对于100000个元素数组/先前示例的列表,我使用871 µs ,使用常规列表13.8 ms 。
HTH,你好
写完后
与使用排序的方法的O(n log n)相比,我的答案中的所有解决方案都是O(n)---进一步,对于大数据集,该numpy
方法应该使用(斜体,因为我手头没有测试... )会受到一个小的乘法因子的影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句