如何根据每个字符串中的字符来修改列表中的每个字符串?

时间:2020-08-31 23:40:17

标签: python

例如,电子邮件中所有的电子邮件中都带有“ @”符号。

lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"] 

当字符数不同时,如何替换“ @”之后的所有文本?我的目标是获得一个新列表,例如:

newlist = ["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]

6 个答案:

答案 0 :(得分:1)

lst = ["johndoe@example.com", "doejohn@email.com", "maryjane@domain.com"]

out = [i.split("@")[0] + "@changed.com" if "@" in i else i for i in lst]
print(out)

打印:

['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']

注意:对于更高级的用例,我建议看一下re模块。

答案 1 :(得分:0)

您可以使用googleapiclient.errors.HttpError: <HttpError 401 when requesting https://www.googleapis.com/calendar/v3/calendars/primary/events/watch?alt=json returned "Unauthorized WebHook callback channel: https://<heroku_application_id>.herokuapp.com"> 来返回符号两侧的字符串数组。

.split()

答案 2 :(得分:0)

您可以使用正则表达式,也可以在此特定示例中使用.partition

lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"] 

>>> [lh+sep+'changed.com' for lh,sep,rh in (s.partition('@') for s in lst)]
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']

如果'@'可能不在字符串中,并且您不想修改这些字符串,则可以执行以下操作:

[lh+sep+'changed.com' if sep else lh 
     for lh,sep,rh in (s.partition('@') for s in lst)]

答案 3 :(得分:0)

选项1:使用正则表达式(正则表达式)。这些使用re库。

选项2:通过遍历列表并将字符串拆分为域和信息部分,然后将域设置为“ changed.com”,以更加Python的方式进行操作。像这样:

emails = ["aperson@email.com", "another@example.org", "onemore@something.net"]
new = [email.split("@")[0]+"@newone.com" for email in emails]

这使用了一种称为列表理解的东西,这是一个非常好的python功能。它会创建一个名为new的列表,该列表存储email的每个项目,其域结尾。

您可以创建如下函数:

def new_domain(emails,domain):
     return [email.split("@")[0]+"@"+domain for email in emails]

这意味着只要您有想要更改结尾的电子邮件列表,就可以使用它。

>>> emails = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"] 
>>> new_domain(emails,"changed.com")
["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]

答案 4 :(得分:0)

您可以使用python slice来分割'@''.'之间的每封电子邮件的一部分,并使用replace方法用所需的域替换该切片:

lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]

lst = [e.replace(e[e.find('@')+1:e.find('.')], 'changed') for e in lst]

print(lst)

输出:

['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']

如果不是所有电子邮件地址都以'.com'结尾,例如某些电子邮件地址以'.ca'结尾,则此方法将派上用场。

答案 5 :(得分:0)

尽管问题变得越来越复杂,尽管split()和正则表达式是有意义的,但对于如上所述的探测,我们可以简单地使用index()

lst = ["johndoe@example.com", "doejohn@email.com", "maryjane@domain.com"]

newlst = [address[:address.index('@')] + "@changed.com" for address in lst]

print(newlst)

输出

> python3 test.py
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']
>