我有以下列表:
names = ['aet2000','ppt2000', 'xxx2001', 'ppt2001']
wanted_list = ['aet','xxx']
我想要做的是在names
中获取包含wanted_list
字符串的列表。
我可以使用此功能,我手动将aet
和xxx
放入过滤器功能。
In [17]: filter(lambda x:'aet' in x or 'xxx' in x, names)
Out[17]: ['aet2000', 'xxx2001']
但它不使用列表wanted_list
。我该怎么办?
答案 0 :(得分:4)
这是列表理解:
fun a -> ...
答案 1 :(得分:1)
正如DYZ所说,x中的aet
或xxx
是错误的,它会返回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']