我有一个参考列表,例如:
dico = [ 'test', 'blabla' ]
我想删除其他列表中包含的这些项目:
listTest = [ 'S01_test', 'S02_ahah', 'S03_blabla' ]
结果应为:
[ 'S02_ahah' ]
我尝试使用套装,但没有成功。有什么想法吗?
谢谢:)
答案 0 :(得分:4)
您可以使用列表解析来执行此操作:
>>> [x for x in listTest if x.split('_')[1] not in dico]
['S02_ahah']
或filter()
:
>>> dico = [ 'test', 'blabla' ]
>>> listTest = [ 'S01_test', 'S02_ahah', 'S03_blabla' ]
>>> filter(lambda x: x.split('_')[1] not in dico, listTest)
['S02_ahah']
如果你在python-3.x
,请记得用list()
包裹filter()
,因为它返回一个迭代器:
>>> f = filter(lambda x: x.split('_')[1] not in dico, listTest)
>>> list(f)
['S02_ahah']
我可能更喜欢使用filter()
而lambda
超过列表组合,但从最基本的时间开始,理解似乎更快。
答案 1 :(得分:0)
使用列表理解
bad_stubs = [ 'test', 'blabla' ]
input = [ 'S01_test', 'S02_ahah', 'S03_blabla' ]
#Gets an item from a list, if not there gives None
def lget(list, index, default=None):
return list[index] if len(list) > index else default
results = [i for i in input if lget(i.split('_'), 1) not in bad_stubs]
也可以使用生成器:
results = (i for i in input if lget(i.split('_'), 1) not in bad_stubs)
注意:如果没有存根(_之后的项目)
,i.split('_')[1]
样式将会出错