我有一个字符串列表,我想用正则表达式过滤。我有了一个解决方案的开端:
lines = ['Some data', 'Data of interest', 'Some data', 'Data of Interest', 'Some data', 'Data of interest']
r = re.compile(r'.*[iI]nterest.*')
relevant_lines = [r.findall(line) for line in lines]
print(relevant_lines)
…这几乎奏效了:
^{pr2}$…但是有没有办法只使用匹配的行而不使用嵌套列表填充结果列表?在
编辑-有没有比下面更干净的方法?
[r[0] for r in [r.findall(line) for line in lines] if len(r) > 0]
以下是控制台中的结果:
^{pr2}$事情并不复杂。将函数式编程与生成器结合起来是非常好的。在
只需使用普通循环,并非所有内容都适合列表比较:
如果使用的是列表比较,则生成表达式并过滤空列表会更好:
^{pr2}$或者用match过滤:
对于python2,使用itertools.ifilter。在
或者,对于使用python2切换itertools.imap的映射和{}的过滤器的功能更强大的方法:
可以使用内部循环的生成器表达式重写您自己的列表组件:
如果您不需要列表,请使用生成器表达式并对其进行迭代。在
相关问题 更多 >
编程相关推荐