Python:如何从另一组中删除set中的数据

时间:2012-02-24 09:13:30

标签: python list set

我有一个参考列表,例如:

dico = [ 'test', 'blabla' ]

我想删除其他列表中包含的这些项目:

listTest = [ 'S01_test', 'S02_ahah', 'S03_blabla' ]

结果应为:

[ 'S02_ahah' ]

我尝试使用套装,但没有成功。有什么想法吗?

谢谢:)

2 个答案:

答案 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]样式将会出错