python 从列表中删除带标点符号的字符串

zpgglvta  于 2022-12-25  发布在  Python
关注(0)|答案(5)|浏览(179)

我正在学习Python,我正在提取一些csv格式的数据。我的目标是把一列,例如“名称”放到一个列表中。这个,我知道怎么做。
之后,我想删除名单中不正确的名字。例如:

lists = [Anderson, Byrne, Clark, Cooper, Davies, Evans, +Miller, Moore, Thom@s, W!lson]

我想要:

lists = [Anderson, Byrne, Clark, Cooper, Davies, Evans, Moore]

因为有些名字里面有+或者@或者!,我不想改字,我想删除那些名字。
我试过了,一个经典的,如果其他的,但它没有工作。

rggaifut

rggaifut1#

您可以使用str.isalpha

names = [
    'Anderson',
    'Byrne',
    'Clark',
    'Cooper',
    'Davies',
    'Evans',
    '+Miller',
    'Moore',
    'Thom@s',
    'W!lson'
]

only_names = [n for n in names if n.isalpha()]
# only_names = list(filter(str.isalpha, names))

print(only_names)
zwghvu4y

zwghvu4y2#

要过滤有效名称:

names = ["john", "mich@el", "suraj"]
valid_names = [name for name in names if name.isalpha()]
print(valid_names)

Output: ['john', 'suraj']

正如OP在下面的评论中所要求的,对于过滤具有有效用户名的有效电子邮件:

emails = ["john.doe99@some.com", "m!chael@other.com", "su_raj.sinha@mail.com"]
valid_emails = []
allowed = "._"

for email in emails:
    username = email.split("@")[0]

    for ch in allowed:
        username = username.replace(ch, "")
    
    if username.isalnum():
        valid_emails.append(email)

print(valid_emails)

Output: ['john.doe99@some.com', 'su_raj.sinha@mail.com']
brccelvz

brccelvz3#

假设列表中的所有元素都是字符串,则可以使用以下命令获得所需的结果:

names = [
    'Anderson',
     'Byrne',
     'Clark',
     'Cooper',
     'Davies',
     'Evans',
     '+Miller',
     'Moore',
     'Thom@s',
     'W!lson'
]

names_filtered = [
    name for name in names if ''.join(c for c in name if c.isalpha()) == name
]
hts6caw3

hts6caw34#

你可以用正则表达式来实现它,Python支持一个正则表达式模块,叫做re
例如,一个名称只由字母组成,可以使用列表解析和re来只过滤有效的名称,如下所示:

import re

names = [
    'Anderson',
     'Byrne',
    'Clark',
    'Cooper',
    'Davies',
    'Evans',
    '+Miller',
    'Moore',
    'Thom@s',
    'W!lson'
]

only_names = [n for n in names if re.match("^[A-Za-z]*$", n)]

print(only_names)
# ['Anderson', 'Byrne', 'Clark', 'Cooper', 'Davies', 'Evans', 'Moore']

有关详细信息,请查看re module documentation

gab6jxml

gab6jxml5#

这段代码运行时没有创建一个额外的列表。它只是使用一个for循环在原处修改列表:

lst = ['Anderson', 'Byrne', 'Clark', 'Cooper', 'Davies', 'Evans', '+Miller', 'Moore', 'Thom@s', 'W!lson']
for ind in range(len(lst) -1, -1, -1):
    if not lst[ind].isalpha():
        del lst[ind]
print(lst)

相关问题