python-3.x - 比较pyspark中的列集
问题描述
我有两个列列表,例如 listA 和 listB。ListB 是 listA 的子集。
我想检查 listB 中的所有列是否都存在于 listA 中,并在此比较的基础上我想做一些操作。
有没有我们可以做同样的选择。
提前致谢。
解决方案
这不是 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 中合并两个集合的底层复杂性。
如果这解决了您的问题,请不要犹豫,投票。
推荐阅读
- bash - 无法在 bash 脚本中循环运行“gradle”相关命令
- react-native - 如何通过 react-native 中的 Youtube API 检索 Youtube 频道视频列表
- java - 如果请求参数超过 15,我应该使用 POST 或 GET 什么?
- javascript - 如何存储自定义 css 。laravel 中的 js 文件并在视图中调用它
- php - 上传后如何从文件名中删除特殊字符
- android - 如何从通知或应用程序图标点击 android 知道应用程序打开?
- mysql - 无法连接到在不同机器上的容器上运行的远程 mySQL 数据库
- c# - 实体框架没有创建具有指定名称的数据库,而是创建了自己的名称,为什么?
- php - 未找到 Laravel API
- pdf - pdf中带有特定坐标的自定义标记?