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"]
我知道怎么做,但没有以有效的方式.
这些是列表,而不是数组.("数组"这个词对不同的人来说意味着不同的东西,但是在python中,对象称自己为列表,就是这样;还有其他模块提供自称为数组的对象,例如array和numpy)
要回答您的问题,最简单的方法是根本不修改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只包含可清除元素(如字符串,数字等)的情况.