我有两个列列表,例如listA和listB。 ListB是listA的子集。
我想检查listB中的所有列是否都存在于listA中,并且基于此比较,我想执行一些操作。
有什么办法可以做到的吗?
谢谢。
答案 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中合并两个集合的潜在复杂性。
如果这可以解决您的问题,请毫不犹豫地投票。