2016-08-02 87 views
0

我得到的名单,如:获取表示字符串列表

['Parker-CP-T', 'Monica-CP-T'] 

我以下列方式使其:

[Margaret, Peter, Julia-noCP-L,Parker-CP-T, Jessica, Monica-CP-T, Mark, Peter-noCP] 

我想获得或只含CP在字符串对象:

headers = ['Margaret', 'Peter', 'Julia-noCP-L', 'Parker-CP-T', 'Jessica', 'Monica-CP-T', 'Mark, Peter-noCP'] 

headers_CPs = [] 
    for i in headers: 
      if "CP" in i: 
        headers_CPs.append(i) 

filtr = filter(lambda x: x.split('-')[1] != "noCP", headers_CPs) 
print filter 

我想学习如何编写高效的代码。因此,我想问你是否有一些想法如何解决这个简单的任务更容易。也许在一条线上?

回答

0

结账list comprehensions。有了,你可以做这样的事情:

headers_CP = [x for x in headers if 'CP' in x] 

这将撤出名单headers包含字符串“CP”的所有项目。

0

一种方法是接受包含-CP-的项目,而不是检查是否存在CP,然后过滤结果。如果你不能确定分隔符(这里'-'),您可以用正则表达式检查

[item for item in headers if '-CP-' in item] 

:您可以将list comprehension内做到这一点。

>>> import re 
>>> 
>>> headers = ['Margaret', 'Peter', 'Julia-noCP-L', 'Parker-CP-T', 'Jessica', 'Monica-CP-T', 'Mark, Peter-noCP'] 
>>> [item for item in headers if re.search(r'\bCP\b', item)] 
['Parker-CP-T', 'Monica-CP-T'] 

正则表达式r'\bCP\b'将仅匹配CP文字是与无单词字符包围(\b是在正则表达式字边界改性剂)。