概要

  今天偶然看到有个关于数学中集合的问题,就突发奇想的想用python实现下求一个集合的子集。

准备

  我当然先要复习下,什么是集合,什么是子集?

  比较粗犷的讲法,集合就是一堆确定的东西,细致一点的讲法呢,就是由一个或多个确定的元素所构成的整体,集合中的东西称为元素。

  集合有一些特性:

  1.确定性

    给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
  2.互异性
    一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。有时需要对同一元素出现多次的情形进行刻画,可以使用多重集,其中的元素允许出现多次。
  3.无序性
  一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。

  集合也有些相关的概念:

  1.空集

    这类集合不包含任何元素,它是任何一个非空集合的真子集,同时它也是任何一个集合的子集。

  2.子集

    如果有两个集合,S,T,对于S中的任何一个元素,都能在T中找到,那么称S是T的子集

  3.真子集

    如果有两个集合,S,T,其中,S是T的子集,但是在T中存在元素不属于S,那么称S是T的真子集。

例子

下面我们就举个例子来具体说明下。

假设有集合 S=(a,b,c)

那么它的子集是(a)(b)(c)(a,b)(a,c)(b,c)(a,b,c)()

真子集是 (a)(b)(c)(a,b)(a,c)(b,c)()

我们可以看出这样一个规律(当然,简单的通过这样一个例子,好像并不能),就是假设集合中元素的个数是N,那么它子集的个数是 2N个,真子集的个数是2N-1个。

这个使我们根据定义通过主观的意识去判断的,通过代码该如何实现呢?

python实现

之前听到过一句话,talk is cheap,show me the code,说起来都是很简单的,代码实现呢?

上代码之前,先简单讲一下这其中的一些算法,通过之前的讲解,很容易就知道,对于一个集合中的元素,要么在它的集合中,要么不在,我们是不是可以利用0和1来表示,

比如上面的集合S,我们就来试一下,

(a)      --> (100)=4

(b)      --> (010)=2

(c)      --> (001)=1

(a,b)   --> (110)=6

(a,c)   --> (101)=5

(b,c)   --> (011)=3

(a,b,c)--> (111)=7

()        --> (000)=0

是不是具有一定的规律?

我们就来实现下:

# -*- coding: utf-8 -*-

list_demo = ['a', 'b', 'c']
sub_list_all = [] # 用于存放集合所有的子集
for i in range(1 << len(list_demo)): # 循环遍历0到2**n之间的每个数
combo_list = [] # 用于存放每个单独的循环中取出的子集
for j in range(len(list_demo)):
if i & (1 << j): # 每一个数用&操作判断改为上是否有1
combo_list.append(list_demo[j]) # 有的话保存起来
sub_list_all.append(combo_list)
print(len(sub_list_all))

  运行下:

E:\pythonsource\venv\Scripts\python.exe E:/pythonsource/study/subsetCompute.py
[[], ['a'], ['b'], ['a', 'b'], ['c'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']] Process finished with exit code 0

python 实现求一个集合的子集的更多相关文章

  1. 求一个集合的所有真子集 Python

    给定一个集合,元素均为正整数且不重复,求该集合的所有子集 # -*- coding: utf-8 -*- """ Created on Tue Oct 10 09:04: ...

  2. [python语法]python中如何判断一个集合是另一个集合的子集?

    问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...

  3. 求一个集合S中m个元素的所有排列以及一个数组A的全排列—递归实现版完整代码

    说明,本文全文代码均用dart语言实现. 求一个集合S中m个元素的所有排列情况,并打印,非常适合用递归的思路实现.本文给出了两种实现方法,一种是给定的填充排列数组长度是固定的,一种是可变长度的.两种方 ...

  4. 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况

    求一个集合S的m个元素组合的所有情况,并打印出来,非常适合采用递归的思路进行求解.因为集合的公式,本身就是递归推导的: C(n,m) = C(n-1,m-1) + C(n-1,m). 根据该公式,每次 ...

  5. 59-python基础-python3-集合-集合常用方法-判断一个集合是否是另一个集合的子集-issubset()-issuperset()

    判断一个集合是否是另一个集合的子集-issubset()-issuperset() 1-issubset() s1.issubset(s) 判断s1是否是s的子集 2-issuperset() 与is ...

  6. C#中判断一个集合是另外一个集合的子集

    有这样的两个集合: string[] bigArr = new string[] { "a", "b", "c" };string[] sm ...

  7. python写的一个集合

    起因:原本打算用python写一个抢火车票的脚本.在那 期间遇见各种浏览器驱动失败的节奏....打算先缓一下 然后就去写集合了. 0x01 源码: # -*- coding:'utf-8' -*- # ...

  8. python基本数据类型之集合

    python基本数据类型之集合 集合是一种容器,用来存放不同元素. 集合有3大特点: 集合的元素必须是不可变类型(字符串.数字.元组): 集合中的元素不能重复: 集合是无序的. 在集合中直接存入lis ...

  9. Python 全栈开发二 python基础 字符串 字典 集合

    一.字符串 1,在python中,字符串是最为常见的数据类型,一般情况下用引号来创建字符串. >>ch = "wallace" >>ch1 = 'walla ...

随机推荐

  1. [macOS] Cannot find libz when install php56

    After upgraded to 10.12 and xcode8.2, when updating php with homebrew, i got these errors: /usr/loca ...

  2. MySQL数据排序asc、desc

    数据排序 asc.desc1.单一字段排序order by 字段名称 作用: 通过哪个或哪些字段进行排序 含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多 ...

  3. 本地设置VirtualBox虚拟机

    主要是涉及到网卡设置,允许本地ping虚拟机

  4. hdu5029 Relief grain

    题目链接 树剖+线段树 将区间修改转化为单点修改,因为如果按DFS序进行修改,那么一定会对DFS序更大的点造成影响 #include<iostream> #include<vecto ...

  5. [转载]Oracle创建用户、角色、授权、建表

    出处:https://www.cnblogs.com/roger112/p/7685307.html oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system p ...

  6. [转载] HTTP 协议中 URI 和 URL 的区别

    出处:https://blog.csdn.net/qq_26975307/article/details/54429760 HTTP = Hyper Text Transfer ProtocolURI ...

  7. Dockfile基本语法

    FROM 功能为指定基础镜像,并且必须是第一条指令. 如果不以任何镜像为基础,那么可写为:FROM scratch. 接下来所写的指令将作为镜像的第一层开始. 格式: FROM <image&g ...

  8. cron笔记

    以前以为添加计划任务就是crontab -e来添加,知道今天偶然发现了/etc/cron.d目录,才发现事情没有那么简单.. crontab -e命令编辑的文件是保存在/var/spool/cron/ ...

  9. git将本地项目上传码云

    1.首先在码云新建项目. 2.使用git bash工具,进入本地项目所在的文件夹. 3.执行命令 git init,初始化本地git仓库 4.执行命令 git remote add [short-na ...

  10. 【问题解决:启动卡死】Eclipse启动卡死的解决办法

    问题描述 Eclipse启动后卡死 问题分析 由于上一次没有正确关闭,导致在启动的时候开始 问题解决 方法1(推荐): 到<workspace>\.metadata\.plugins\or ...