在Python中使用带有其他数组的数组

Sco*_*ott 5 python arrays extract

试图找到一种有效的方法来提取数组中的所有项目实例.

例如

array1 = ["abc", "def", "ghi", "jkl"]

array2 = ["abc", "ghi", "456", "789"]
Run Code Online (Sandbox Code Playgroud)

数组1是需要从数组2中提取的项目数组.因此,数组2应该被修改为 ["456", "789"]

我知道怎么做,但没有以有效的方式.

Dev*_*rre 6

这些是列表,而不是数组.("数组"这个词对不同的人来说意味着不同的东西,但是在python中,对象称自己为列表,就是这样;还有其他模块提供自称为数组的对象,例如arraynumpy)

要回答您的问题,最简单的方法是根本不修改array2.使用列表理解:

set1 = set(array1)
array2 = [e for e in array2 if e not in set1]
Run Code Online (Sandbox Code Playgroud)

(该集合使这个O(n)而不是O(n ^ 2))

如果你绝对必须改变array2(因为它存在于别处),你可以使用切片赋值:

array2[:] =  [e for e in array2 if e not in set1]
Run Code Online (Sandbox Code Playgroud)

它同样有效,但有点讨厌.

编辑:正如Mark Byers所指出的,这只适用于array1只包含可清除元素(如字符串,数字等)的情况.

  • 如果你不关心重复或命令,你应该考虑做`set(array2) - set(array2)`. (2认同)