是否有一种可接受的有效方法来查找python中数字列表的范围(即最大值 - 最小值)?我尝试过使用循环,我知道我可以使用min
和max
函数进行减法。我只是想知道是否有某种更快的内置。
答案 0 :(得分:11)
如果您真的需要高性能,请尝试Numpy。函数numpy.ptp
计算数组中值的范围(即max - min
)。
答案 1 :(得分:4)
您不可能找到比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
的每个维护一个脏标志,这样弄脏的标志仍然允许你使用缓存的值其他人。
答案 2 :(得分:3)
如果您使用Numpy并且您拥有一维数组(或者可以从列表中快速创建一个数组),则可以使用函数numpy.ptp()
:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ptp.html