Python,删除列表中出现的所有字符串

The*_*mlt 6 python string list

说我有一个清单:

main_list = ['bacon', 'cheese', 'milk', 'cake', 'tomato']
Run Code Online (Sandbox Code Playgroud)

和另一个清单:

second_list = ['cheese', 'tomato']
Run Code Online (Sandbox Code Playgroud)

我想从主列表中删除第二个列表中找到的所有元素?

先感谢您

亚当

Thi*_*ter 11

new_array = [x for x in main_array if x not in second_array]
Run Code Online (Sandbox Code Playgroud)

但是,对于大型列表而言,这不是很有效.您可以使用以下集合进行优化second_array:

second_array = set(second_array)
new_array = [x for x in main_array if x not in second_array]
Run Code Online (Sandbox Code Playgroud)

如果项目的顺序无关紧要,您可以为两个数组使用一个集合:

new_array = list(set(main_array) - set(second_array))
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,只是一个小小的补充:您可以通过将`second_array`更改为第一个集来优化顺序保留变量:`second_set = set(second_array); new_array = [x for main_array中的x,如果x不在second_set中]` (2认同)

fra*_*xel 7

如果订单不重要,您可以使用套装:

>>> main_array = ['bacon', 'cheese', 'milk', 'cake', 'tomato']
>>> second_array = ['cheese', 'tomato']
>>> set(main_array) & set(second_array)
set(['tomato', 'cheese'])
Run Code Online (Sandbox Code Playgroud)

这里我们使用交叉运算符&.如果您只想要在第二个列表中找不到的项目,我们可以使用差异,-:

>>> set(main_array) - set(second_array)
set(['cake', 'bacon', 'milk'])
Run Code Online (Sandbox Code Playgroud)