我想根据正则表达式筛选列表中的字符串。
还有什么比 [x for x in list if r.match(x)]更好的吗?
[x for x in list if r.match(x)]
您可以使用以下方法在 Python 3.x 中创建 迭代器或在 Python 2.x 中创建 名单:
filter(r.match, list)
要将 Python 3.x 迭代器转换为一个列表,只需将其强制转换为: list(filter(..))。
list(filter(..))
完整示例(Python 3) : 对于 Python 2.x,请查看下面的 Note
import re mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"] r = re.compile(".*cat") newlist = list(filter(r.match, mylist)) # Read Note below print(newlist)
印刷品:
['cat', 'wildcat', 'thundercat']
注:
对于 Python 2.x 开发人员,filter已经返回了一个列表。在 Python 3. x filter被修改为返回一个迭代器,所以它必须被转换为 list(为了看到它很好地打印出来)。
filter
list
Python 3代码示例 Python 2.x 代码示例
为了在不首先编译正则表达式的情况下完成此操作,请使用 lambda函数,例如:
lambda
from re import match values = ['123', '234', 'foobar'] filtered_values = list(filter(lambda v: match('^\d+$', v), values)) print(filtered_values)
返回:
['123', '234']
filter()只是接受一个 callable作为它的第一个参数,并返回一个列表,其中该可调用函数返回一个“ truthy”值。
filter()
callable