在列表中获取指示的字符串

时间:2016-08-02 23:17:50

标签: python

我得到了如下列表:

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

我想获取或仅包含字符串中的CP的对象:

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

我是用以下方式制作的:

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

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

2 个答案:

答案 0 :(得分:0)

结帐list comprehensions。有了这个,你可以这样做:

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

这将拉出列表headers中包含字符串'CP'的所有项目。

答案 1 :(得分:0)

一种方法是接受包含-CP-的项目,而不是检查CP是否存在,然后过滤结果。您可以在list comprehension

中执行此操作
[item for item in headers if '-CP-' in item]

如果您不确定分隔符(此处'-'),可以使用正则表达式进行检查。

>>> 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是正则表达式中的单词边界修饰符)。