首页 > 解决方案 > 比较pyspark中的列集

问题描述

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

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

有没有我们可以做同样的选择。

提前致谢。

标签: python-3.xalgorithmlistpyspark

解决方案


这不是 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 中合并两个集合的底层复杂性。

如果这解决了您的问题,请不要犹豫,投票。


推荐阅读