我有两个列表,看起来像这样:
list1 = ['a','a','b','b','b','c','d','e','e','g','g']
list2 = ['a','c','z','y']
我想做的是保留list1中与list2相同的所有元素。 结果应该是:
outcome= ['a','a','c']
我有两个列表,看起来像这样:
list1 = ['a','a','b','b','b','c','d','e','e','g','g']
list2 = ['a','c','z','y']
outcome= ['a','a','c']
使用 in
运算符,可以检查一个元素是否在序列中。
>>> list2 = ['a','c','z','y']
>>> 'x' in list2
False
>>> 'y' in list2
True
使用列表推导式:
>>> 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']
filter()
。 - Delganlist(filter(list2.__contains__, list1))
- falsetru['a','a','c']
。 - falsetru从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']
filterfalse
返回的是一个itertools
对象,因此需要使用list
函数进行转换。
你也可以使用filter
函数。
>>> list(filter(lambda x: x in list2 , list1))
['a', 'a', 'c']
使用numpy的另一种替代方法:
import numpy as np
np.asarray(list1)[np.in1d(list1, list2)].tolist()
#['a', 'a', 'c']