比较pyspark中的列集

时间:2019-03-07 10:36:37

标签: python-3.x algorithm list pyspark

我有两个列列表,例如listA和listB。 ListB是listA的子集。

我想检查listB中的所有列是否都存在于listA中,并且基于此比较,我想执行一些操作。

有什么办法可以做到的吗?

谢谢。

1 个答案:

答案 0 :(得分:-1)

这不是pyspark问题,而是python问题:

选项1:为此开发一个基本功能。这样做的想法是,一旦证明listA的元素不包含在listB中,就立即停止搜索。

def containsAllOf(listA, listB):
    for (e in listA):
        if (!listB.contains(e)):
            return false
    return true

这个解决方案也可以这样写(虽然更优雅,但是如果第二个列表中未包含给定列表,第一个选项可能会更快地告诉您)。

def containsAllOf(listA, listB):
    len([x for x in listA if x in listB]) == len(listA)

选项2:使用pyton函数(集合论)。这个想法:如果listA内部联接listB == listA,则肯定将listA的所有元素包含在listB中。

def containsAllOf(listA, listB):
    length(list(set(listA) & set(listB))) == length(listA)

我不确定哪个选项最适合您,您需要进行测试。这取决于两个列表的大小。但是第一种选择已经具有相当不错的算法复杂度O(n)。第二个变量的预测要复杂一些,但是它可能是O(n log(n)),具体取决于在Python中合并两个集合的潜在复杂性。

如果这可以解决您的问题,请毫不犹豫地投票。