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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赫凯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值