如何根据另一个列表保留列表的元素

时间:2015-12-15 11:46:11

标签: python list filter

我有两个列表:

list1 = ['a','a','b','b','b','c','d','e','e','g','g']

list2 = ['a','c','z','y']

我想要做的是将list1的所有元素保留在list2中。 结果应该是:

outcome= ['a','a','c']

3 个答案:

答案 0 :(得分:6)

使用in运算符,您可以检查元素是否处于序列中。

>>> list2 = ['a','c','z','y']
>>> 'x' in list2
False
>>> 'y' in list2
True

使用list comprehension

>>> list1 = ['a','a','b','b','b','c','d','e','e','g','g']
>>> list2 = ['a','c','z','y']
>>> [x for x in list1 if x in list2]
['a', 'a', 'c']

但是x in list效率不高。您最好将list2转换为set对象。

>>> set2 = set(list2)
>>> [x for x in list1 if x in set2]
['a', 'a', 'c']

答案 1 :(得分:5)

从Python 3开始使用itertools.filterfalse

>>> import itertools
>>> list1 = ['a','a','b','b','b','c','d','e','e','g','g']
>>> list2 = ['a','c','z','y']
>>> list(itertools.filterfalse(lambda x:x not in list2,list1))
['a', 'a', 'c']

list调用是必要的,因为filterfalse会返回itertools个对象。

您还可以使用filter功能

>>> list(filter(lambda x: x in list2 , list1))
['a', 'a', 'c']

答案 2 :(得分:3)

numpy的另一种替代方法:

import numpy as np

np.asarray(list1)[np.in1d(list1, list2)].tolist()
#['a', 'a', 'c']