想象一下,我有以下字符串:
['a','b','c_L1', 'c_L2', 'c_L3', 'd', 'e', 'e_L1', 'e_L2']
" c"字符串有重要的子类别(L1,L2,L3)。这些表示我们的目的的特殊数据,这些数据是在基于预先指定的字符串" L"的程序中生成的。换句话说,我知道特殊条目应该具有以下形式:
name_Lnumber
知道我正在寻找这种模式,而且我正在使用" L"或更具体地说" _L"作为我对这些对象的指定,我如何返回满足此条件的条目列表?在这种情况下:
['c', 'e']
答案 0 :(得分:4)
使用简单的过滤器:
>>> l = ['a','b','c_L1', 'c_L2', 'c_L3', 'd', 'e', 'e_L1', 'e_L2']
>>> filter(lambda x: "_L" in x, l)
['c_L1', 'c_L2', 'c_L3', 'e_L1', 'e_L2']
或者,使用列表理解
>>> [s for s in l if "_L" in s]
['c_L1', 'c_L2', 'c_L3', 'e_L1', 'e_L2']
由于您只需要前缀,您可以将其拆分:
>>> set(s.split("_")[0] for s in l if "_L" in s)
set(['c', 'e'])
答案 1 :(得分:3)
您可以使用以下列表理解:
>>> set(i.split('_')[0] for i in l if '_L' in i)
set(['c', 'e'])
或者,如果您想匹配以_L(digit)
结尾而不是_Lm
之类的元素,则可以使用正则表达式:
>>> import re
>>> set(i.split('_')[0] for i in l if re.match(r'.*?_L\d$',i))
set(['c', 'e'])