【发布时间】:2025-11-23 00:40:02
【问题描述】:
我有一个很长的电子邮件列表,我想处理:
- 区分好邮件和坏邮件,并且
- 删除重复项,但保持所有非重复项的顺序相同。
这是我目前所拥有的:
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 中改进这一点?也许使用列表推导或迭代器?
编辑:对不起!忘了说这是 Python 2.5,因为这是用于 GAE 的。
email_re 来自 django.core.validators
【问题讨论】:
-
如果您不确定瓶颈在哪里,您可以使用 cProfile 运行它以查看一直占用的时间。
-
很可能您使用的任何正则表达式都是这里的瓶颈。介意张贴吗?编译了吗?
-
@jozzas,他使用它的方式是:
email_re.match(email),它仅在 email_re 是已编译的正则表达式时有效。
标签: python performance list iterator