擅长:python、mysql、java
<p>这可以使用<a href="https://docs.python.org/2/library/functions.html#map" rel="nofollow noreferrer">^{<cd1>}</a>和<a href="https://docs.python.org/2/library/functions.html#filter" rel="nofollow noreferrer">^{<cd2>}</a>实现,如</p>
<pre><code>>>> s = {'abcd', 'abdd', 'acdd'}
>>> pat = re.compile('ab.d')
>>> map(lambda x:x.string,filter(None, map(pat.search,s)))
['abcd', 'abdd']
</code></pre>
<p>请注意,<code>map</code>在显微镜下比列表理解快。你知道吗</p>
<pre><code>bhargav@bhargav:~$ python -m timeit "import re;s = {'abcd', 'abdd', 'acdd'};[el for el in s if re.search('ab.d', el)]"
100000 loops, best of 3: 4.59 usec per loop
bhargav@bhargav:~$ python -m timeit "import re;s = {'abcd', 'abdd', 'acdd'};pat = re.compile('ab.d'); map(lambda x:x.string,filter(None, map(pat.search,s)))"
100000 loops, best of 3: 4.21 usec per loop
</code></pre>
<p>如您所见,使用<code>map</code>和<code>filter</code>可以使它快<code>0.38</code>微秒。你知道吗</p>
<p>但是,如果考虑可读性<a href="https://stackoverflow.com/a/29657728/4099593">orlp's list comprehension</a>更好。(在这种情况下,这是另一种方法)</p>