如何删除作为 Python 中列表元素的字符串的一些前导字符?

How to remove some leading characters of a string which is an element of a list in Python?

我从一位同事那里得到了一个电子邮件地址列表,比如 -

listNew = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']

请问如何删除Python列表中某些地址元素中的“<”和“<”之前的所有字符?

呼叫.split()并参加最后一部分!

作为列表理解

[value.split("<")[-1] for value in original_values]

如果您想要 任何可用的名称和地址,请使用专用库,它还可以处理电子邮件地址有效性方面的麻烦问题
https://docs.python.org/3/library/email.utils.html#email.utils.parseaddr

>>> from email.utils import parseaddr
>>> parseaddr("foo <bar.baz@example.com")  # easily handles missing '>'
('foo', 'bar.baz@example.com')

一起

from email.utils import parseaddr

def parse_emails_to_pairs(emails_list):
    for email_str in emails_list:
        name, email = parseaddr(email_str)
        if not email:
            raise ValueError(f"couldn't parse email {email_str}")
        yield (name or None, email)
>>> list(parse_emails_to_pairs(['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']))
[(None, 'john.smith@hotmail.com'), ('Tom White', 'tom.white@gmail.com'), (None, 'connie.green@yahoo.com')]

另请注意,按字面意思命名您的列表 list 是一种糟糕的做法,因为它会破坏 list() 并可能使该范围内的未来读者感到困惑! (虽然这对你的情况可能无关紧要)

list1 = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']
for i in range(len(list1)):
    list1[i]=list1[i].split('<')[-1]
print(list1)

一种解决方案是对数组使用 map() 方法,然后通过使用 lambda 函数传入每个数组项来将 replace() 应用于它们。

list = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']

list = map(lambda email: email.replace("<", ""), list)

print(list)

编辑:没有看到您想要删除所有前导,而不仅仅是 <,在这种情况下,您可以在字符串上使用 find() 函数:

for idx, val in enumerate(list):
    print(list[idx])
    if val.find('<') >= 0:
        list[idx] = val[val.find('<')+1:len(val)]
    else: 
        list[idx] = val
print(list)