在python中高效地查找数组的范围?

在python中高效地查找数组的范围?,python,performance,range,max,min,Python,Performance,Range,Max,Min,在python中,是否有一种公认的有效方法来查找数字列表的范围(即最大值-最小值)?我尝试过使用循环,我知道我可以使用带减法的min和max函数。我只是想知道是否有某种内置的速度更快。你不可能找到比min和max功能更快的东西 您可以编写一个minmax函数,该函数只执行一次过程来计算两个值,而不是两次过程,但您应该对此进行基准测试,以确保速度更快。如果它是用Python本身编写的,则可能不是这样,但是添加到Python中的C例程可以做到这一点。类似(伪代码,尽管看起来像Python): def

在python中,是否有一种公认的有效方法来查找数字列表的范围(即最大值-最小值)?我尝试过使用循环,我知道我可以使用带减法的
min
max
函数。我只是想知道是否有某种内置的速度更快。

你不可能找到比
min
max
功能更快的东西

您可以编写一个
minmax
函数,该函数只执行一次过程来计算两个值,而不是两次过程,但您应该对此进行基准测试,以确保速度更快。如果它是用Python本身编写的,则可能不是这样,但是添加到Python中的C例程可以做到这一点。类似(伪代码,尽管看起来像Python):

def最小最大值(arr):
如果arr为空:
返回(无,无)
themin=arr[0]
themax=arr[0]
对于arr[1:]中的每个值:
如果值<最小值:
themin=值
其他:
如果值>最大值:
最大值=最大值
返回值(最小值,最大值)
另一种可能是在数组周围插入您自己的类(如果您想直接在实际数组上工作,这可能是不可能的)。这将基本上执行以下步骤:

  • 将初始空数组标记为干净
  • 如果将第一个元素添加到数组中,请将
    themin
    themax
    设置为该值
  • 如果将元素添加到非空数组中,则根据新值与它们的比较方式,设置
    themin
    themax
  • 如果删除的元素等于min或max,请将数组标记为dirty
  • 如果从干净数组请求最小值和最大值,则返回
    themin
    themax
  • 如果从脏数组请求最小值和最大值,请使用上述伪代码中的循环计算
    themin
    themax
    ,然后将数组设置为干净
这样做的目的是缓存最小值和最大值,这样,在最坏的情况下,您只需要不频繁地进行大型计算(在删除最小值或最大值的元素之后)。所有其他请求都使用缓存的信息

此外,添加元素可以使
themin
themax
保持最新,而无需进行大量计算


而且,可能更好的是,您可以为每个
themin
themax
维护一个脏标志,这样弄脏其中一个将仍然允许您使用另一个的缓存值。

如果您确实需要高性能,请尝试Numpy。该函数计算数组中的值范围(即
max-min
)。

如果您使用Numpy并且您有一个一维数组(或者可以从列表中快速创建一个),则函数
Numpy.ptp()


就像对语义的一个小小的吹毛求疵。。。我将调用
min
max
内置函数,而不是
方法
…您可能会将其更改为
elif value>themax:
,因为在有序字段中,一个值不可能大于或小于另一个值。在一个随机分布的列表中,这将显著减少比较的数量。姆吉尔森:谢谢,修复了这个问题。乔尔,这是一个很好的观点,也解决了。反正我在用numpy。这正是我要找的!您先回答了1分钟,因此您得到了复选标记;)我仍然缺少一个numpy函数/方法,它返回一个包含最小值和最大值的元组:o(
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)