擅长:python、mysql、java
<p>只需使用普通循环,并非所有内容都适合列表比较:</p>
<pre><code>r = re.compile(r'.*[iI]nterest.*')
relevant_lines = []
for line in lines:
mtch = r.match(line)
if mtch:
relevant_lines.append(mtch.group())
</code></pre>
<p>如果使用的是列表比较,则生成表达式并过滤空列表会更好:</p>
^{pr2}$
<p>或者用match过滤:</p>
<pre><code>[x.group() for x in filter(None,(r.match(line) for line in lines))]
</code></pre>
<p>对于python2,使用<a href="https://docs.python.org/2/library/itertools.html#itertools.ifilter" rel="nofollow">itertools.ifilter</a>。在</p>
<p>或者,对于使用python2切换<a href="https://docs.python.org/2/library/itertools.html#itertools.imap" rel="nofollow">itertools.imap</a>的映射和{<cd1>}的过滤器的功能更强大的方法:</p>
<pre><code>[x.group() for x in filter(None, map(r.match, lines))]
</code></pre>
<p>可以使用内部循环的生成器表达式重写您自己的列表组件:</p>
<pre><code>[r[0] for r in (r.findall(line) for line in lines) if r]
</code></pre>
<p>如果您不需要列表,请使用生成器表达式并对其进行迭代。在</p>