python - 单次迭代中的最小值、最大值和平均值

标签 python max average min

如果我有一个列表中的数字或对象列表,如 l = [3,5,3,6,47,89]。我们可以使用以下 python 代码计算最小值、最大值和平均值

minimum = min(l)
maximum = max(l)
avg = sum(l) / len(l)

由于所有涉及迭代整个列表,对于大列表和大量代码来说速度很慢。是否有任何python模块可以一起计算所有这些值?

最佳答案

赛通函数:

@cython.boundscheck(False)
@cython.wraparound(False)
def minmaxAvg(list x):

    cdef int i
    cdef int _min, _max, total
    _min = x[0]
    _max = x[0]
    total = 0
    for i in x:
        if i < _min: _min = i 
        elif i > _max: _max = i 
        total += i
    return _min, _max, total/len(x)

要比较的纯 python 函数:

def builtinfuncs(x):
    a = min(x)
    b = max(x)
    avg = sum(x) / len(x)
    return a,b,avg


In [16]: x = [random.randint(0,1000) for _ in range(10000)]

In [17]: %timeit minmaxAvg(x)
10000 loops, best of 3: 34 µs per loop

In [18]: %timeit frob(x)
1000 loops, best of 3: 460 µs per loop

免责声明:
- cython 的速度结果将取决于计算机硬件。
- 不像使用内置函数那样灵活和万无一失。例如,您必须更改函数以处理除整数以外的任何内容。
- 在走这条路之前,你应该问问自己这个操作是否真的是你应用程序中的一个大瓶颈。可能不是。

关于python - 单次迭代中的最小值、最大值和平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175372/

相关文章:

java - 在 Java ArrayList 中查找最大元素

python - 如何仅对二维列表的第一列使用 min()

java - 使用 Joda Time 获取平均时间

sql - 这段代码中的 IF 语句有什么问题?

scala - 如何找到两个 Option[Int] 的 min() 或 max()

Java,使用Math.random计算中位数和平均值

python - SVG 转黑白

python - 嵌入式python解释器,生成自动补全的 stub 源代码

Python UTF-16 WAVY DASH 编码问题/问题

python - Tastypie 迁移错误