【发布时间】:2015-08-22 17:04:50
【问题描述】:
我有一个包含一些虚拟电子邮件地址的列表,如下所示:
listEmails = ['brian-23@email.com', 'britts_54@email.com', 'lara$@email.com']
我试图使用lambda 和filter 来获取有效电子邮件地址的列表。
假设lara$@email.com 是唯一无效的电子邮件地址。
我使用正则表达式通过以下代码过滤掉无效电子邮件。
listValid = list(filter(lambda x: x if re.match(r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]{0,3}$",x) ,listEmails))
在listEmails)) 之前,我一直在, 收到语法错误。
通常,lambda 函数将逗号 (,) 后面的值作为 输入值,所以我不确定 lambda 函数是否假设 x 来自re.match(r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]{0,3}$",x) 作为输入值。
具有if 条件的 Lambda 函数可以通过以下情况实现:
from functools import reduce
f = lambda a,b: a if (a > b) else b
reduce(f, [47,11,42,102,13])
所以,我想知道为什么它在我的情况下不起作用?
注意:由于 lambda 函数本身出现错误,因此我尚未评估 list(filter( 是否会返回所需的结果。
【问题讨论】:
-
re.match 将是 None 对于不匹配,所以你不需要任何 if