<p>将<a href="http://docs.python.org/2/library/functions.html#filter" rel="nofollow">^{<cd1>}</a>与<code>None</code>一起使用,它将从传递给它的iterable中筛选出所有错误值。</p>
<p>在Python3中,<code>filter</code>返回一个迭代器,因此您应该对它调用<code>list()</code></p>
<pre><code>>>> lis = ['field', 'field', '', '', '', '']
>>> list(filter(None, lis))
['field', 'field']
>>> len(list(filter(None, lis)))
2
</code></pre>
<p><strong>代码:</strong></p>
<pre><code>>>> my_dict = {
'John greased ': ['axle', 'wheel', 'wheels', 'wheel', 'engine', ''],
'Paul alleged ': ['truth', 'crime', 'facts', 'infidelity', 'incident', ''],
'Tracy freed ': ['animals', 'fish', 'slaves', 'slaves', 'slaves', 'pizza'],
'Lisa plowed ': ['field', 'field', '', '', '', ''],
}
for k,v in my_dict.items():
print (k, len(list(filter(None, v))))
...
Paul alleged 5
Lisa plowed 2
John greased 5
Tracy freed 6
</code></pre>
<p><code>filter(None,..)</code>与列表理解的时间比较:</p>
<pre><code>>>> lis = ['field', 'field', '', '', '', '']*100
>>> %timeit list(filter(None, lis))
10000 loops, best of 3: 22.2 us per loop
>>> %timeit [item for item in lis if item]
10000 loops, best of 3: 53.1 us per loop
>>> lis = ['field', 'field', '', '', '', '']*10000
>>> %timeit list(filter(None, lis))
100 loops, best of 3: 2.36 ms per loop
>>> %timeit [item for item in lis if item]
100 loops, best of 3: 5.22 ms per loop
</code></pre>