Python 列表列表中的平均列表-是否有更有效的方法?

Python 列表列表中的平均列表-是否有更有效的方法?,python,performance,python-3.x,Python,Performance,Python 3.x,我有一个名为“run”的列表。我正在使用代码的这一部分创建这些列表的平均值: ave = [0 for t in range(s)] for t in range(s): z = 0 for i in range(l): z = z + run[i][t] #Converted values to a string for output purposes # Added \n to output ave[t]= ((

我有一个名为“run”的列表。我正在使用代码的这一部分创建这些列表的平均值:

ave = [0 for t in range(s)]
for t in range(s):
    z = 0
    for i in range(l):
        z = z + run[i][t]
        #Converted values to a string for output purposes
        # Added \n to output
        ave[t]= ((str(z / l) + "\n"))

令我惊讶的是,这段代码在我第一次编写时就起作用了。我现在计划使用更大的列表和更多的值,性能问题可能会起作用。这种编写方法在使用计算资源方面是否效率低下?我如何编写效率更高的代码?

列表理解可能更有效

>>> run = [[1, 2, 3, 4, 5], [6, 7, 8, 9], [10, 11, 12, 13]]
>>> [sum(elem)/len(elem) for elem in zip(*run)]  
[5.666666666666667, 6.666666666666667, 7.666666666666667, 8.666666666666666]
或者,您可以尝试
map()


通过让Python使用高效的内置函数和列表理解为您完成更多工作,您可以提高效率:

averages = [sum(items) / len(run) for items in zip(*run)]


我输入这个问题是为了寻找以下内容,这是愚蠢的,但因为它不使用
zip
,所以它不会忽略任何值。 如果您有一个不同长度的列表的数字列表,并且希望找到平均列表

将numpy导入为np
定义我的意思(列表中的列表):
maxlen=max([len(l)代表列表中的l])
对于范围内的i(len(列表中的列表)):
而len(列表中的列表[i])
给予


我在文档中没有看到
itertools.zip
,这引入了一个
numpy
依赖项。感谢@user2357112的bugreport。它是固定的。
numpy
依赖性是利用numpy提供的效率,这至少与没有itI的平均速度一样快。我在这里仍然看到
itertools.zip
。那应该是什么?(当您使用numpy时,这是一种奇怪的方式。为什么不使用
numpy.average(run,0)
?)我认为您想要
itertools.izip
,而不是
itertools.zip
。或者只使用
zip
我很确定
itertools.izip
在Python3中就是
zip
。查看和的文档。而且,我认为
numpy.avg
根本不存在。哎呀!固定的。谢谢。:)这看起来是渐进的好。除非z溢出。(避免阅读)但是内置函数在实践中可能更快更清晰。由于列表长度的巨大差异,您扩展列表的部分似乎效率极低。我同意!欢迎任何改进。这对于我的个人用例来说已经足够了
averages = [sum(items) / len(run) for items in zip(*run)]
import numpy as np
ave = [np.avg(col) for col in zip(*run)]
ave = [sum(col)/len(col) for col in zip(*run)]
[ 2.  3.  4.  5. 10.]