如何删除作为 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)
我从一位同事那里得到了一个电子邮件地址列表,比如 -
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)