python遍历集合_Python 高效遍历 集合所有子集的全组合

最近在用 Python 做一个图形化界面 tkinter 的小工具,目的是为了把一个集合里的所有组合给遍历出来,与另外给定的一个值相匹配,把相等的那些组合输出。

本来用的 combinations,但是后来集合里的数一多之后,程序容易未响应

但是当集合里的数达到 47 个的时候,程序也未响应了,不知道各位大佬有没有什么办法啊~

arr = "$57,297.60 $53,573.02 $109,771.72 $43,386.68 $50,667.74 $50,171.84 $50,116.20 $54,679.96 $180,469.76 $48,363.96 $53,830.44 $54,882.94 $39,291.00 $42,284.76 $56,562.80 $50,566.64 $49,074.30 $49,547.44 $57,377.27 $78,517.60 $98,067.60 $59,814.15 $48,171.20 $53,398.52 $53,855.76 $159,975.77 $104,100.16 $49,196.98 $56,236.80 $48,394.16 $48,516.08 $51,086.12 $176,979.69 $48,359.82 $38,507.20 $47,707.80 $45,640.80 $45,691.18 $39,096.42 $39,102.40 $48,984.36 $101,147.01 $96,127.95 $38,416.00 $36,247.80 $35,989.12 $40,142.10"

su = "537754.94"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用集合来表示一组不重复的元素。而集合子集聚合成若干个互不相交的集合,可以通过以下步骤来实现: 1. 首先,我们将所有的子集存储在一个列表中。利用Python中的内置函数`itertools.combinations`可以轻松地生成一个集合的所有子集。 ```python import itertools original_set = {1, 2, 3} subsets = [set(combo) for r in range(len(original_set)+1) for combo in itertools.combinations(original_set, r)] ``` 此时,`subsets`列表中包含了原始集合的所有子集。 2. 接下来,我们需要将子集聚合成若干个互不相交的集合。为了实现这一点,我们可以遍所有的子集,并逐一判断其是否与现有的集合相交。 ```python disjoint_sets = [] for subset in subsets: is_disjoint = True for set in disjoint_sets: if subset.intersection(set): is_disjoint = False break if is_disjoint: disjoint_sets.append(subset) ``` 在这个循环中,我们首先将`is_disjoint`设置为True,表示当前子集与已有集合互不相交。然后,我们遍现有的集合,若子集与任意一个集合存在交集,则将`is_disjoint`设置为False,并跳出内部循环。最后,如果`is_disjoint`为True,说明子集与现有集合互不相交,将其添加到`disjoint_sets`列表中。 至此,我们已经实现了将集合子集聚合成若干个互不相交的集合的过程。需要注意的是,这里的实现方法仅适用于小规模的集合,对于大规模的集合会有较高的时间复杂度。在实际应用中,可以考虑采用更高效的算法来处理大规模集合的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值