首页 > 解决方案 > 如何从列表中删除除单词之外的所有内容?

问题描述

我有一个这样的列表:

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())]

但效果不够好

标签: pythonlist

解决方案


非正则表达式解决方案:

您可以从删除字符开始'-\\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,你可以使用 pattern: '([A-Za-z].*?)\\\\n' with 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']]

推荐阅读