擅长:python、mysql、java
<pre><code>filter(test1, filter(test2, filter(test3, the_list)))
</code></pre>
<p>首先,这是O(n)时间,而不是O(n^3)时间。时间加不乘。唯一可能更糟的是,如果test3/test2/test1做了一些奇怪的事情,我们应该看看这些。在</p>
<p>如果我们建议每次测试?函数需要10毫秒,那么我们有10*3*10^5毫秒=50分钟。如果是n^3,那么我们有(10*10^5)^3=3100万年。我很确定你只是一个线性时间,你有大量的数据。在</p>
<p>将过滤器替换为itertools.ifilter,它将避免生成列表。相反,python将一次从列表中拉出一个项,通过三个测试,当且仅当它通过时将其交给您。它可以避免内存需求,而且可能更快。在</p>
<p>除非使用一些索引技术,否则将无法在O(n)时间上改进。但是,索引技术的适用性取决于您在test1/test2/test3函数中执行的操作。如果您需要帮助,请为这些函数演示一个示例。在</p>
<p>正如其他人所指出的,数据库的设计就是为了解决这些问题。你可以让这个更快,只需要糟糕地重新实现数据库已经为你做的事情。在</p>