使用 .rstrip( "@" 从 Python 列表中删除电子邮件地址



我有一个电子邮件地址列表,我想删除"@"之后的所有内容。到目前为止,我的代码是这样的:

user_emails = ['me@organization.org', 'you@organization.org', name@organization.org'] emails = [user.rstrip("@") for user in user_emails]

但当我运行此代码时,没有任何变化。当我运行时:

emails = [user.strip("@organization.org") for user in user_emails]

@被删除了,但它左边的字符也是,这对我没有好处。

我应该做些什么来删除这个角色吗?

感谢您的真知灼见。

rstrip("@")不起作用,因为字符串右侧没有@

当电子邮件地址的用户名部分末尾有O、R、G、A、N、I、Z、T、O或N时,rstrip("@organization.org")删除的内容多于@organization.org。请记住,rstrip()(及其表亲(会删除所列字符中的任何,而不是您提供的字符串。

一个常见的解决方案是在@符号上进行拆分,并获取返回列表的第一项。

addresses = [addr.split("@", 1)[0] for addr in user_addresses]

(命名很重要。我用了user_addresses而不是user_email,因为你没有用户的电子邮件,你有他们的电子邮件地址。(

通用解决方案确实为处理的每个地址创建了一个(小(临时列表。下一次迭代几乎会立即重用此内存,因此不太可能产生任何严重的有害影响。尽管如此,如果您想避免创建不需要的列表,您可以使用str.find()来查找@并分割域部分。

addresses = [addr[:addr.find("@")] for addr in user_addresses]

rstrip只去掉尾随字符,请参阅此处的参考资料。论点是要去掉的字符。

当您执行user.rstrip("@")时,不会发生任何事情,因为@不在user的末尾,即它不在后面

您只需要在'@'上进行拆分,然后进行第一部分:

user_emails = ['me@organization.org', 'you@organization.org', 'name@organization.org']
emails = [user.split("@")[0] for user in user_emails]

如果你真的想使用.rstrip(),你可以做:

emails = [user.rstrip("@organization.org") for user in user_emails]

请小心在此处使用.rstrip()。类似'foo@organization.org'.rstrip("@organization.org")的东西会产生不同的答案。

.rstrip()删除右端的字符。

例如:

>>> 'asd@'.rstrip('@') 
asd
>>> 'asd@a'.rstrip('@')
asd@a

最新更新