我得到了如下列表:
[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
我想学习如何编写有效的代码。因此,我想问你是否有一些想法如何更容易地解决这个简单的任务。也许在一条线上?
答案 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
是正则表达式中的单词边界修饰符)。