我有一个相对复杂的脚本,该脚本要求函数必须在for循环内执行,在某些情况下,一个函数的结果将被读入下一个函数。我可以使用for循环相对容易地解决这个问题,但是执行速度明显低于列表理解。我不确定如何使用列表理解来执行此问题。有没有更好的矢量化方法来在python中做到这一点。我要举一个比我实际问题简单得多的示例,但我认为它突出了问题所在。任何想法都将不胜感激。
pom.xml
答案 0 :(得分:1)
我不知道这是否正是您要寻找的东西,但是如果您首先创建对值的理解,然后填充您的obj
列表,则可以在两行中稍微优雅一点。
values = [(func1(i), func2(i), func3(func2(i)) for i in range(10) if (i != 3 and i != 7)]
obj = [test(v[0]+v[1], v[0]+v[1]+v[2], v[0]+v[1]) for v in values]
缺点是更多的内存使用情况,必须将值保留在内存中,但这也应与上述代码同时调用每个函数。如果您可以创建列表生成器而不是对values
的理解,那将进一步提高它的速度。
答案 1 :(得分:1)
只需将循环内部塞入自己的函数即可。
def loop_interior(i):
value1 = func1(i)
value2 = func2(i)
value3 = func3(value2)
one1 = value1 + value2
two1 = value1 + value2 + value3
three1 = value1 + value3
return test(one1, two1, three1)
现在,填充obj
的循环又短又甜。如果愿意,您甚至可以使用列表理解。 obj = [loop_interior(i) for i in range(10) if (i != 3 and i != 7)]