是否有一种公认的有效方法来查找python中数字列表的范围(即最大值 - 最小值)?我尝试过使用循环,我知道我可以使用min
和max
函数进行减法。我只是想知道是否有某种更快的内置。
问问题
9063 次
3 回答
12
如果你真的需要高性能,试试 Numpy。该函数计算数组numpy.ptp
中值的范围(即)。max - min
于 2012-10-25T01:55:08.017 回答
4
你不可能找到比min
andmax
函数更快的东西。
您可以编写一个函数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
or的元素,themax
则将数组标记为脏。 - 如果从一个干净的数组中请求最小值和最大值,则返回
themin
andthemax
。 - 如果从脏数组中请求最小值和最大值,则在上面的伪代码中计算
themin
并使用循环,然后将数组设置为干净。themax
这样做是为了缓存最小值和最大值,这样在最坏的情况下,您只需要不经常进行大计算(在删除最小值或最大值的元素之后)。所有其他请求都使用缓存信息。
此外,元素的添加无需大量计算即可保持themin
和更新。themax
而且,可能更好的是,您可以为每个themin
and维护一个脏标志,themax
以便弄脏一个仍然允许您使用另一个的缓存值。
于 2012-10-25T01:49:21.597 回答
4
如果你使用 Numpy 并且你有一个一维数组(或者可以从列表中快速创建一个),那么就有了函数numpy.ptp()
:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ptp.html
于 2012-10-25T01:55:32.537 回答