我有两个列表:
list1 = ['a','a','b','b','b','c','d','e','e','g','g']
list2 = ['a','c','z','y']
我想要做的是将list1的所有元素保留在list2中。 结果应该是:
outcome= ['a','a','c']
答案 0 :(得分:6)
使用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']
答案 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']