使用列表理解</p>你不会错的。
<p>我探索了以下方法:</p>
<ol>
<li>基本for循环</li>
<li>用if比较列出理解</li>
<li>带lambda表达式的内置筛选器函数</li>
<li>列表生成器</li>
</ol>
<p>Python2.7.12和Python3.5.2(不是最新版本)探讨了这些方法。在Python2中,最好的方法是方法4,而在Python3中,最好的方法是方法2(至少对于我的版本来说,它也不是最新的)。你知道吗</p>
<p>以下是Python 2.7.12的结果:</p>
<pre><code># 2.7.12
# [GCC 5.4.0 20160609]
# Method 1 found 496 item in 0.382161 seconds. (basic for-loop)
# Method 2 found 496 item in 0.365456 seconds. (list comprehension)
# Method 3 found 496 item in 0.565614 seconds. (built in filter function)
# Method 4 found 496 item in 0.273335 seconds. (list comprehension over a generator expression)
</code></pre>
<p>以下是Python 3.5.2的结果:</p>
<pre><code># 3.5.2
# [GCC 5.4.0 20160609]
# Method 1 found 493 item in 0.500266 seconds. (basic for-loop)
# Method 2 found 493 item in 0.338361 seconds. (list comprehension)
# Method 3 found 493 item in 0.796027 seconds. (built in filter function)
# Method 4 found 493 item in 0.351668 seconds. (list comprehension over a generator expression)
</code></pre>
<p>以下是用于获取结果的代码:</p>
<pre><code>import time
import random
import sys
print(sys.version)
l = []
for i in range(10000):
d = {'price': random.randint(40, 60), 'id': i}
l.append(d)
#METHOD 1 - basic for-loop
start = time.time()
for _ in range(1000):
results = []
for d in l:
if d['price'] == 50:
results.append(d)
end = time.time()
print("Method 1 found {} item in {:f} seconds. (basic for-loop)".format(len(results), (end - start)))
#METHOD 2 - list comp with if statement
start = time.time()
results = []
for _ in range(1000):
results = []
results = [d for d in l if d['price'] == 50]
end = time.time()
print("Method 2 found {} item in {:f} seconds. (list comprehension)".format(len(results), (end - start)))
#METHOD 3 - using filter and a lambda expression
start = time.time()
results = []
for _ in range(1000):
results = []
results = list(filter(lambda d: d['price'] == 50, l))
end = time.time()
print("Method 3 found {} item in {:f} seconds. (built in filter function)".format(len(results), (end - start)))
#METHOD 4 - list comp over generator expression
start = time.time()
results = []
once = True
for _ in range(1000):
results = []
genResults = (d for d in l if d['price'] == 50)
results = [it for it in genResults]
end = time.time()
print("Method 4 found {} item in {:f} seconds. (list comprehension over a generator expression)".format(len(results), (end - start)))
</code></pre>