我有一个很长的电子邮件列表,我想处理:
到目前为止,我的情况是:
email_list = ["joe@example.com", "invalid_email", ...]
email_set = set()
bad_emails = []
good_emails = []
dups = False
for email in email_list:
if email in email_set:
dups = True
continue
email_set.add(email)
if email_re.match(email):
good_emails.append(email)
else:
bad_emails.append(email)
我希望这段代码尽可能快,并且不那么重要,以最小化内存需求。在Python中有没有改进的方法?可能使用列表理解或迭代器?你知道吗
编辑:对不起!忘记提到这是Python2.5,因为这是针对GAE的。你知道吗
电子邮件来自django.core.validators验证程序你知道吗
我想不出任何办法来加快你的速度。使用
set
来跟踪事物很快,使用list
来存储列表也很快。你知道吗我喜欢
OrderedSet
解决方案,但我怀疑OrderedSet
的Python实现会比您编写的更快。你知道吗您可以使用
OrderedDict
来解决这个问题。但这是为Python2.7添加的。你可以使用一个配方(比如:http://code.activestate.com/recipes/576693/)来添加OrderedDict
,但我认为它不会比你所拥有的更快。你知道吗我正在尝试使用一个用C实现的Python模块来解决这个问题。我想这是打败你的唯一希望。但我什么都没想到。你知道吗
如果您可以去掉
dups
标志,那么只需运行较少的Python代码,速度就会更快。你知道吗有趣的问题。祝你好运。你知道吗
查看:Does Python have an ordered set?,然后选择一个您喜欢的实现。你知道吗
所以只要:
可能是最快和最简单的解决方案,你可以实现。你知道吗
相关问题 更多 >
编程相关推荐