如何从另一个列表中筛选列表

时间:2017-03-17 01:43:44

标签: python list

我有以下列表:

names = ['aet2000','ppt2000', 'xxx2001', 'ppt2001']
wanted_list = ['aet','xxx']

我想要做的是在names中获取包含wanted_list字符串的列表。

我可以使用此功能,我手动将aetxxx放入过滤器功能。

In [17]: filter(lambda x:'aet' in x or 'xxx' in x, names)
Out[17]: ['aet2000', 'xxx2001']

但它不使用列表wanted_list。我该怎么办?

3 个答案:

答案 0 :(得分:4)

这是列表理解:

fun a -> ...

答案 1 :(得分:1)

正如DYZ所说,x中的aetxxx是错误的,它会返回names中的所有元素,我想这是你想要的:

names =['aet2000','ppt2000', 'xxx2001', 'ppt2001']
wanted_list = ['aet','xxx']

print filter(lambda x:'aet' in x or 'xxx'  in x, names)

或者你可以试试这个:

print [j for i in wanted_list for j in names if i in j]

顺便说一句,也许startswith也可以这样做:

print [j for i in wanted_list for j in names if j.startswith(i)]

答案 2 :(得分:1)

您可以使用正则表达式拉出要匹配的字符串部分,并检查它是否在列表中。

>>> import re
>>> names = ['aet2000','ppt2000', 'xxx2001', 'ppt2001']
>>> wanted_list = ['aet','xxx']
>>> [name for name in names if re.match(r'[^\d]+|^', name).group(0) in wanted_list]
['aet2000', 'xxx2001']