用Pythonic处理许多功能复杂的for循环的好方法是什么?

时间:2018-07-06 14:22:17

标签: python python-3.x for-loop coding-style

我有一个相对复杂的脚本,该脚本要求函数必须在for循环内执行,在某些情况下,一个函数的结果将被读入下一个函数。我可以使用for循环相对容易地解决这个问题,但是执行速度明显低于列表理解。我不确定如何使用列表理解来执行此问题。有没有更好的矢量化方法来在python中做到这一点。我要举一个比我实际问题简单得多的示例,但我认为它突出了问题所在。任何想法都将不胜感激。

pom.xml

2 个答案:

答案 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)]