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

Blu*_*oon 4 python list filter

我有两个列表看起来像:

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

list2 = ['a','c','z','y']
Run Code Online (Sandbox Code Playgroud)

我想要做的是保持list1的所有元素也在list2中.结果应该是:

outcome= ['a','a','c']
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 7

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

>>> list2 = ['a','c','z','y']
>>> 'x' in list2
False
>>> 'y' in list2
True
Run Code Online (Sandbox Code Playgroud)

使用列表理解:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

x in list效率不高.你最好转换list2成一个set对象.

>>> set2 = set(list2)
>>> [x for x in list1 if x in set2]
['a', 'a', 'c']
Run Code Online (Sandbox Code Playgroud)


Bha*_*Rao 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']
Run Code Online (Sandbox Code Playgroud)

list呼叫是必要的,因为filterfalse返回一个itertools对象.

您也可以使用该filter功能

>>> list(filter(lambda x: x in list2 , list1))
['a', 'a', 'c']
Run Code Online (Sandbox Code Playgroud)