我在python中有两个大字符串列表。我想以o(n)的顺序快速减去这两个列表。我发现了某种方法,例如从第一个列表中循环删除第二个列表元素,或将列表转换为set()(问题:列表的更改顺序)并使用minus(-)运算符,但这些方法效率不高。有什么方法可以执行此操作吗?
a=['1','2','3',...,'500000']
b=['1','2','3',...,'200000']
c=a-b
c=['200001','200002',...,'500000']
答案 0 :(得分:1)
您提出的问题是:
对于任意数据,列表搜索为O(N),集合搜索为O(1),转换为集合为O(N)。通过A的是O(N)。
因此,它是仅具有列表的O(N ^ 2)和将B转换为集合的O(N)。
加快速度的唯一方法是提高迭代效率或搜索效率-如果不使用有关数据的其他知识,这是不可能的。例如
A[len(B):]
。numpy
arrays及其快速setdiff1d