如何从列表中删除除单词以外的所有内容?

2024-06-28 10:59:39 发布

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

我有这样一份清单:

my_list=["'-\\n'",
 "'81\\n'",
 "'-\\n'",
 "'0913\\n'",
 "'Assistant nursing\\n'",
 "'0533\\n'",
 "'0895 Astronomy\\n'",
 "'0533\\n'",
 "'Astrophysics\\n'",
 "'0532\\n'"]

有没有办法把这个列表中除了单词以外的所有东西都删除

输出:

my_list=['Assistant nursing',
 'Astronomy',
 'Astrophysics',]

例如,我知道如果我想删除字符串形式的整数,我可以这样做:

no_integers = [x for x in my_list if not (x.isdigit() 
                                         or x[0] == '-' and x[1:].isdigit())]

但效果还不够好


Tags: integersno字符串列表my整数单词形式
2条回答

有规则的表达

import re

my_list = # above
# remove \n, -, digits, ' symbols
my_new_list = [re.sub(r"[\d\\n\-']", '', s) for s in my_list]
# remove empty strings
my_new_list = [s for s in my_new_list if s != '']

print(my_new_list)

输出

['Assistat ursig', ' Astroomy', 'Astrophysics']

非正则表达式解决方案:

您可以先将字符'-\\n分条,然后使用str.isalpha或空格只提取字母表中的字符,然后过滤掉空的子字符串''。你可能需要在最后去掉空白字符,而

>>> list(filter(lambda x: x!='', (''.join(j for j in i.strip('\'-\\\\n') if j.isalpha() or j==' ').strip() for i in my_list)))

['Assistant nursing', 'Astronomy', 'Astrophysics']

如果要使用regex,可以使用模式:'([A-Za-z].*?)\\\\n're.findall,然后过滤掉空列表中的元素,最后可以展平列表

>>> import re
>>> list(filter(lambda x: x, [re.findall('([A-Za-z].*?)\\\\n', i) for i in my_list]))
[['Assistant nursing'], ['Astronomy'], ['Astrophysics']]

相关问题 更多 >