有没有一种被广泛接受且高效的方法来查找Python中数字列表的范围(即最大值-最小值)?我尝试使用循环,并知道可以使用减法通过min
和max
函数。我只是想知道是否有一种更快的内置方法。
有没有一种被广泛接受且高效的方法来查找Python中数字列表的范围(即最大值-最小值)?我尝试使用循环,并知道可以使用减法通过min
和max
函数。我只是想知道是否有一种更快的内置方法。
numpy.ptp
计算数组中值的范围(即max-min
)。您不太可能找到比min
和max
函数更快的东西。
您可以编写一个minmax
函数,它只需要进行一次遍历来计算两个值,而不是两次遍历,但您应该对其进行基准测试以确保它更快。如果它是用Python本身编写的,那么它可能不会更快,但是添加到Python中的C例程可能会做到这一点。类似于(伪代码,即使它看起来像Python):
def minmax (arr):
if arr is empty:
return (None, None)
themin = arr[0]
themax = arr[0]
for each value in arr[1:]:
if value < themin:
themin = value
else:
if value > themax:
themax = value
return (themin, themax)
themin
和themax
设置为该值。themin
和themax
。themin
或themax
的元素,则标记数组为脏。themin
和themax
。themin
和themax
,然后将数组设置为干净。这样做的作用是缓存最小值和最大值,以便在最坏的情况下,只需要偶尔进行大量计算(在删除作为最小值或最大值的元素之后)。所有其他请求都使用缓存的信息。
此外,添加元素可以使themin
和themax
保持最新,而无需进行大量计算。
而且,可能更好的是,您可以为每个themin
和themax
维护一个脏标志,以便污染其中一个仍然允许您使用另一个的缓存值。
min
和max
为内置函数,而不是方法
... - mgilsonelif value > themax:
,因为在有序字段中,一个值不可能既大于另一个值又小于它。在随机分布的列表上,这应该会显著减少比较次数。 - Joel Cornettnumpy.ptp()
:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ptp.html