首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Python计算给定集的幂集

用Python计算给定集的幂集
EN

Code Review用户
提问于 2017-09-29 16:53:40
回答 1查看 5.1K关注 0票数 4

问题:

给定一个集合(例如整数),返回其所有子集的列表(也称为幂集)。

它看起来很有用,但我希望对算法和Python编码风格和技术进行反馈,因为我对Python还很陌生。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_power_set(s):

    empty_set = set()
    power_set = [empty_set]

    for elem in s:
        # Need this temporary list because we can't change the power_set list while iterating it. Or so I think.
        new_sets = [] 
        for power_set_item in power_set:
            new_set = set().union(power_set_item) # Is this the best way to copy set?
            new_set.add(elem)
            new_sets.append(new_set)
        power_set.extend(new_sets)

    return power_set
EN

回答 1

Code Review用户

回答已采纳

发布于 2017-09-30 04:00:16

  1. 为您的问题找到合适的数据类型。

这实际上是任务中的一个问题。根据定义,功率集是一个集合。您甚至使用变量名power_set,所以实际上它是一个列表而不是一个集合,这是非常令人惊讶的。

  1. 冗余命名:

很明显,set()是一个空集:更好的使用: power_set = [set()]

  1. 如果没有必要,不要缩写:

你可以写for element in s

  1. 姓名:

命名是最难的部分。但我将power_set_item简单地称为subset

  1. 运算符

这是开放的辩论,也许只是我的品味,但我会使用|而不是联合方法。这也意味着使用|=+=而不是更新和扩展。

  1. 复制

通常,复制的最佳方法是调用copy方法:new_set = power_set_item.copy()。但在您的示例中,需要注意的是,|.union返回一个新集,以便您可以编写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_sets.append(subset | {element})

所有点加在一起产生以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_power_set(s):

    power_set = [set()]

    for element in s:
        new_sets = [] 
        for subset in power_set:
            new_sets.append(subset | {element})
        power_set.extend(new_sets)

    return power_set
  1. 清单理解:

正如您在评论中所写的,您不喜欢new_sets变量。你可以很容易地摆脱它,通过使用列表理解。一般来说,如果您有如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A = []
for j in B:
    x = do_stuff(j)
    A.add(x)

请始终检查是否无法以下列方式编写它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A = [do_stuff(j) for j in B]

这使我们现在有了以下改进:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_power_set(s):

    power_set = [set()]

    for element in s:
        one_element_set = {element}
        power_set += [subset | one_element_set for subset in power_set]

    return power_set

使用one_element_set = {element}的目的是防止重复创建一个新对象的代价可能很高。

  1. 数据类型

回到第一点。如果我们使用前面的代码,我们可以很容易地修改它,返回一组frozensets:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_power_set(s):

    power_set = {frozenset()}

    for element in s:
        one_element_set = frozenset({element})
        power_set |= {subset | one_element_set for subset in power_set}

    return power_set
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/176840

复制
相关文章
马蹄集------函数的幂
一看这种题目就是需要用到递归思想的,编写一个函数,函数里面写一个if_else根据a的大小来分类,但是要求的是数据会很大,需要输出的是这个值的个位数,所以,可以对每次用到的数据对10取余。
用户10271432
2022/12/19
3120
马蹄集------函数的幂
移动计算的未来:是什么在推动变革? | 幂集创新
一切技术创新周期,一切发明时代,其实都是幂集创新作用的时代。我们希望通过这一系列栏目提供一种尺度,丈量技术创新周期的尺度,从技术维度把握创新浪潮的演进路线。
量子位
2022/12/08
3900
移动计算的未来:是什么在推动变革? | 幂集创新
利用组合数进行幂集索引
在计算机科学中,通常使用二进制表示来表示子集的包含情况。如果集合中有n个元素,那么幂集的大小为2^n。考虑一个集合{a, b, c},其幂集为{{}, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}。每个子集都可以用二进制数来表示,其中每一位代表集合中对应位置的元素是否包含在子集中。
华科云商小徐
2024/05/09
1120
集五福,我用 Python
【导读】你的五福集齐了吗?作为一名技术人,我们是不是可以用技术方法快速实现呢?今天,我们就为大家推荐四种新鲜的方法,生成风格不同又数量庞大的「福」字,让大家不用满世界找福字,动动手指即可。
区块链大本营
2020/02/21
9750
集五福,我用 Python
【说站】python集合的差集如何计算
1、可以使用-符号来计算两个或更多集合的差集。即集合元素包含在集合a中,但不包含在集合b中。
很酷的站长
2022/11/23
7460
发明时代,「幂集创新」事关你我
萧箫 李根 发自 凹非寺 量子位 | 公众号 QbitAI Welcome to the Invention Age. “欢迎来到发明时代。” 这是2019年我在参访高通总部时留下的至今依然印象极深的标语,那时5G商用和落地的话题热议前所未有,深度学习掀起的AI浪潮波澜壮阔,已经初步完成基建覆盖的云计算蓄势待发,甚至还有区块链算法的价值重估。 交融交汇在一起,确实令人兴奋又期待。 但多重新技术交融就能驱动进入“发明时代”?又有怎样的标尺和刻度可以观照这种发明时代?以及3年后的现在,我们确实处在全新的发明时代
量子位
2022/08/26
3450
发明时代,「幂集创新」事关你我
【集合论】集合概念与关系 ( 真子集 | 空集 | 全集 | 幂集 | 集合元素个数 | 求幂集步骤 )
全集 : 限定所讨论的集合 , 都是某个集合的子集 , 则称该集合为全集 , 记作
韩曙亮
2023/03/28
1.5K0
榕树集–量子计算
相干伊辛机(Coherent Ising Machine, CIM)是一种基于实验物理学的计算机,用于解决组合优化问题,它使用相干光振荡器网络来模拟伊辛模型,实验室阶段目前能达到10万比特(2021年)。
DrugScience
2024/01/02
2870
榕树集–量子计算
python set 交集、并集、差集
valid = set(['yellow', 'red', 'blue', 'green', 'black'])
用户7886150
2021/01/26
3.6K0
python数组并集交集补集
并集 a = ["a", "b", "c", "d"] b = ["b", "e"] c = ["a", "b", "c", "d", "e"] # 并 # 合并数组 a.extend(b) # 去重 array = list(set(a)) print(array) # 第二种方法 array = list(set(a)|set(b)) print(array) 打印结果: ['c', 'a', 'b', 'd', 'e'] ['c', 'a', 'b', 'd', 'e'] 交集 a = ["a",
机器学习和大数据挖掘
2019/07/02
2.3K0
SQL 差集计算的例子
SELECT a.assigned_to_workno from (SELECT DISTINCT(assigned_to_workno) from issue ) a where a.assigned_to_workno not in (SELECT work_no FROM employee WHERE is_active = 'y'); SELECT * FROM issue WHERE assigned_to_workno in (SELECT a.assigned_to_workno
一个会写诗的程序员
2018/08/17
1K0
【算法】js求一个数组的幂集
如题: 例如数组[1,2,3],我们要把它生成[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]
且陶陶
2023/04/12
1.6K0
【算法】js求一个数组的幂集
【Python】题集 of ①
第一题:描述:有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数都是多少?并且把组成的数的总数给打印出来!
謓泽
2022/12/12
3870
【Python】题集 of ③
🚀write in front🚀   📝个人主页:打打酱油desu_泽En_CSDN博客📝 🆔本文由 泽En 原创 CSDN首发🐒 如需转载还请通知⚠ 🏅2021年度博客之星物联网与嵌入式开发TOP5→作者周榜56→总排名2919🏅  🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:【Python】题目_打打酱油desu-CSDN博客📢 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩 ---- 目录
謓泽
2022/12/12
3820
『Python』题集⒋
🚀write in front🚀 ---- 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~周榜50»总榜2308🏅 🆔本文由 謓泽 原创 CSDN首发🐵如需转载还请通知⚠ 📝个人主页 ⇥ 謓泽的博客_CSDN博客💬 🎁欢迎各位 ⇥ 点赞👍 + 收藏⭐️ + 留言📝​ 📢系列专栏 ⇥【Python】系列_謓泽的博客-CSDN博客[〇~①]🎓 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
謓泽
2022/12/12
4960
Python求列表的差集、交集与并集?
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
程序员小猿
2021/01/19
1.6K0
【Python】题集 of ②
🚀write in front🚀   📝个人主页:打打酱油desu_泽En_CSDN博客📝 🆔本文由 泽En 原创 CSDN首发🐒 如需转载还请通知⚠ 🏅2021年度博客之星物联网与嵌入式开发TOP5→作者周榜56→总排名2919🏅  🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:【Python】题目_打打酱油desu-CSDN博客📢 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩 第六题:描
謓泽
2022/12/12
3030
python有趣的案例集
打字游戏,随机出现一个单词打乱字母顺序往下落,需要在落下前按顺序拼写正确,每对一个字母,会消失一个,不同难度对应不同长度的单词和下落速度。(动图超过300上传不了,只能放两张照片了)
叶子陪你玩
2021/08/23
6410
python有趣的案例集
python输入两个集合取并集_python交集并集差集
第一种方法:使用python基本数据结构set集合。 优点:集合运算长度可以不一致,运算效率高 缺点:两个进行运算的集合中不能够含有重复的元素,如果含有的话,转成set集合后,会自动去掉重复元素
全栈程序员站长
2022/11/08
1.4K0
数据集的划分--训练集、验证集和测试集
        在机器学习中,经常提到训练集和测试集,验证集似有似无。感觉挺好奇的,就仔细查找了文献。以下谈谈训练集、验证集和测试集。
Flaneur
2020/03/25
5.3K0

相似问题

用Python压缩集的输出

30

计算给定随机充分参数集的所有LED特性

20

生成给定集的所有子集

10

用日志填充集的循环。

10

用setuid集调用脚本

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文