我有一段代码在我的项目中需要运行成千上万次:
def resample(freq, data):
output = []
for i, elem in enumerate(freq):
for _ in range(elem):
output.append(data[i])
return output
例如:resample([1,2,3], ['a', 'b', 'c'])
=> ['a', 'b', 'b', 'c', 'c', 'c']
我希望尽可能提高这个方法的速度。使用列表推导似乎可以更快。我尝试过以下代码:
def resample(freq, data):
return [item for sublist in [[data[i]]*elem for i, elem in enumerate(frequencies)] for item in sublist]
这段代码很丑陋,而且速度慢,因为它先构建列表,然后将其展平。有没有一种用单行列表推导式快速完成的方法?或者使用numpy做些什么?
提前感谢!
编辑:答案不一定要消除嵌套循环,最快的代码是最好的。
freq
中的数字很大,那么在单个循环中使用extend
可能比append
更好。 - John Colemannumpy
和pandas
可以直接处理权重,例如计算平均值 https://docs.scipy.org/doc/numpy/reference/generated/numpy.average.html - Stuart