2016-08-02 84 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是在正則表達式字邊界改性劑)。