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

2024-06-16 10:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,电子邮件中都有“@”符号

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

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

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

Tags: 文本com目标列表example电子邮件emaildomain
3条回答
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']

注意:对于更高级的用例,我建议查看^{}模块

选项1:使用正则表达式。它们使用re库

选项2:通过在列表中循环并将字符串拆分为一个域和信息部分,然后将域设置为“changed.com”,以更符合pythonic的方式进行操作。像这样:

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"]

您可以使用.split(),它将返回符号任一侧的字符串数组

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

for email in list:
    split_email = email.split("@")
    split_list.append(split_email[0] + "@changed.com")

print(split_list)

相关问题 更多 >