擅长:python、mysql、java
<p>我会使用lambdas:</p>
<pre><code>>>> is_happy = lambda tweet: any(map(lambda x: x in happy_set, tweet.split()))
>>> is_sad = lambda tweet: any(map(lambda x: x in sad_set, tweet.split()))
>>> data = ["Hi, I am sad :( but don't worry =D", "Happy day :-)", "Boooh :-("]
>>> filter(lambda tweet: is_happy(tweet) and not is_sad(tweet), data)
['Happy day :-)']
>>> filter(lambda tweet: is_sad(tweet) and not is_happy(tweet), data)
['Boooh :-(']
</code></pre>
<p>这将避免创建<code>data</code>的中间副本。你知道吗</p>
<p>如果<code>data</code>真的很大,你可以用包<code>itertools</code>中的<code>ifilter</code>替换<code>filter</code>,得到迭代器而不是列表。你知道吗</p>