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

时间:2018-12-03 17:14:33

标签: python list character strip

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

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]

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

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

感谢您的见解。

3 个答案:

答案 0 :(得分:3)

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]

答案 1 :(得分:1)

您只需要分拆'@'并参加第一部分:

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

答案 2 :(得分:1)

rstrip仅去除结尾的字符,请参见reference here。参数是要剥离的字符。

当您执行user.rstrip("@")时,什么都不会发生,因为@不在user的末尾,即它没有尾随