比较两个列表以获得不匹配的元素

程序员向导

我检查了此比较列表,只有一个答案与我要执行的操作有关。我必须列出一些类似的元素,我想获得不匹配的元素。

len(h) = 1973182  #h[0] = 'B00006J8F4F2', y[0] = 'B0075Y2X2GO6'
len(y) = 656890

我在做

new_list = [i for i in h if i not in y],但是大约需要13分钟才能完成,是否有更快的方法?

在“重复”问题中,查找不在列表中的元素,我使用相同的代码,我正在寻找一种更快的方法。

亚图

您可以sets用来更有效地找到两个列表之间的差异。如果你需要保持秩序原始列表,您可以使用sorted一个key

我们要根据集合中的元素在原始列表中的出现对它们进行排序,因此一种方法是构建查找字典。我们可以使用enumerate它。然后,我们只需要将字典作为key函数进行查找

d = {j:i for i,j in enumerate(h)}
new_list  = sorted(list((set(h) - set(y))), key = lambda x: d[x])

让我们尝试一个简单的例子:

y = range(5)
h = range(7)
d = {j:i for i,j in enumerate(h)}
sorted(list((set(h) - set(y))), key = lambda x: d[x])
# [5, 6]

时间-

import random
y = random.sample(range(1, 10001), 10000)
h = random.sample(range(1, 20001), 10000)

%timeit [i for i in h if i not in y]
# 1.28 s ± 37.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

def using_sets(a,b):
    d = {j:i for i,j in enumerate(a)}
    sorted(list((set(a) - set(b))), key = lambda x: d[x])

%timeit using_sets(h,y)
# 6.16 ms ± 373 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

因此,有了明显的改进,提议的方法执行速度提高了200倍。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过比较两个ArrayList获得不匹配的值

比较两个array-list元素并获得不常见的元素

比较两个对象以获得匹配的元素

比较两个列表并获得差异

比较两个不同列表的元素

如何比较两个列表元素?

比较两个不匹配的列表,并标识具有最大匹配元素的行

Scala/Java:比较两个列表/集合并从两个列表中删除匹配的元素

在比较两个列表时如何获取不匹配元素的列表?

比较两个列表并在字典中获得匹配的结果-python

比较两个列表的元素并删除列表的特定元素

比较同一行的两列,以获得不匹配的第一个值

比较两个无序列表,并找出pyspark中哪些元素不匹配

比较两个不相等条目的列表并获取包含匹配元素的行 tcl

如何比较两个文件以获得匹配的记录?

比较Python中的两个json并获得匹配

如何在 Laravel 中比较两个对象并获得不同的列

如何比较两个不同的SQL表并获得不同的值?

比较两个列表中的元素并添加不同的元素

比较列表(列表)中两个元素的位置

如何比较两个不同的列表并获得两个列表的差异?

如何获得两个向量之间匹配的元素的比例?

查找两个列表中匹配元素之间的元素

Python-在两个列表中获得重复匹配

AssertJ 如何通过元素值比较两个列表?

比较两个嵌套列表并保持元素的并集

按元素比较两个列表的更快方法

比较Django模板中两个列表的对应元素

比较python中两个列表中的元素