【发布时间】:2018-06-29 16:17:12
【问题描述】:
我有一段代码在我的项目中运行了数千次:
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 的东西?
提前致谢!
编辑:答案不一定需要消除嵌套循环,最快的代码是最好的
【问题讨论】:
-
列表推导并不比等效的 for 循环快,因为它们执行完全相同的操作。
-
只要使用
[e for i, e in enumerate(y) for j in range(x[i])] -
你在说什么类型的输入?如果
freq中的数字很大,那么在单个循环中使用extend可能比append更好 -
我不同意关闭@jonrsharpe。它不是那个问题的重复。
-
是的,我也不同意结案。
标签: python