Python 数组里找出子超集
碰见一个问题,有一个大数组,如下所示:
xx = [[1, 3, 4], [3, 4, 5], [1, 2, 3, 4, 5], [6], [7, 8], [6, 7, 8]]
大数组里面有好多小的数组,观察发现,小的数组其实有挺多别的小数组的子集,现在问题来了,想看下这里的有多少个能把小数组代表的出来的并集组合。
翻译起来就是,上面的数组我想要出来[[1, 2, 3, 4, 5],[6, 7, 8]]。
其实就是排序整理一下就可以了。
# 定义一个二维数组,每个元素是一个小数组
xx = [[1, 3, 4], [3, 4, 5], [1, 2, 3, 4, 5], [6], [7, 8], [6, 7, 8]]# 按照小数组的长度升序排序
sorted_array = sorted(xx, key=lambda x: len(x))# 初始化一个空列表,用于存储符合条件的索引
xx_index = []# 初始化一个标记数组,用于记录每个小数组是否被处理过
arr_index = [0] * len(sorted_array)# 从排序后的数组的最后一个元素开始倒序遍历
for i in range(len(sorted_array) - 1, 0, -1):# 如果当前元素未被标记为已处理if arr_index[i] == 0:# 遍历排序后的数组中的每一个元素for j in range(len(sorted_array)):# 如果 j 位置的元素未被处理,并且 j 位置的数组长度小于当前 i 位置的数组长度# 并且 j 位置的数组是 i 位置数组的子集if arr_index[j] == 0 and len(sorted_array[j]) < len(sorted_array[i]) and set(sorted_array[j]).issubset(set(sorted_array[i])):# 标记 j 位置的数组为已处理arr_index[j] = 1# 将当前 i 位置的索引加入结果列表xx_index.append(i)