python中超集、子集、并集、交集、差集等

概念
1.子集、超集

如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集,集合B称为集合A的超集。

2.并集

给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集。

3.交集

所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集

4.差集

所有属于集合A不属于集合B的元素,和所有属于集合B且不属于集合A的元素,组成的集合称为AB的差集

5.集合A相对集合B的差

集合A中所有不在集合B中的元素,称为A相对B的差

格式

子集issubset()
超集issuperset()
并集|
交集&
差集^
相对差-

举例

a = {1, 2, 3, 4, 5, 6}
b = {4, 5, 6, 7, 8, 9}
c = {1, 2, 3}
print(c.issubset(a))  # 判断c是a的子集,结果为True
print(a.issuperset(c))  # 判断a是c的超集,结果为True
print(a | b)  # 并集,结果为{1, 2, 3, 4, 5, 6, 7, 8, 9}
print(a & b)  # 交集,结果为{4, 5, 6}
print(a ^ b)  # 差集,结果为{1, 2, 3, 7, 8, 9}
print(a - b)  # a相对b的差,结果为{1, 2, 3}
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用C语言实现集合运算的代码,其中包括注释解释每个函数的作用: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> // 定义集合的最大元素数量 #define MAX 100 // 定义集合结构体 typedef struct { int set[MAX]; // 集合中的元素 int size; // 集合中元素数量 } Set; // 从键盘输入集合元素 void inputSet(Set *s) { printf("请输入集合元素数量:\n"); scanf("%d", &s->size); printf("请输入集合元素(空格隔开):\n"); for (int i = 0; i < s->size; i++) { scanf("%d", &s->set[i]); } } // 输出集合元素 void outputSet(Set s) { printf("{ "); for (int i = 0; i < s.size; i++) { printf("%d ", s.set[i]); } printf("}\n"); } // 判断元素x是否在集合s中 int isElementOf(int x, Set s) { for (int i = 0; i < s.size; i++) { if (x == s.set[i]) { return 1; } } return 0; } // 求两个集合的并集 Set unionSet(Set s1, Set s2) { Set res; res.size = 0; // 遍历s1中的元素,加入结果集合 for (int i = 0; i < s1.size; i++) { if (!isElementOf(s1.set[i], res)) { res.set[res.size++] = s1.set[i]; } } // 遍历s2中的元素,加入结果集合 for (int i = 0; i < s2.size; i++) { if (!isElementOf(s2.set[i], res)) { res.set[res.size++] = s2.set[i]; } } return res; } // 求两个集合的交集 Set intersectionSet(Set s1, Set s2) { Set res; res.size = 0; // 遍历s1中的元素,如果在s2中也存在,则加入结果集合 for (int i = 0; i < s1.size; i++) { if (isElementOf(s1.set[i], s2)) { res.set[res.size++] = s1.set[i]; } } return res; } // 求两个集合的差集 Set differenceSet(Set s1, Set s2) { Set res; res.size = 0; // 遍历s1中的元素,如果不在s2中,则加入结果集合 for (int i = 0; i < s1.size; i++) { if (!isElementOf(s1.set[i], s2)) { res.set[res.size++] = s1.set[i]; } } return res; } // 求一个集合的幂集 void powerSet(Set s) { // 幂集元素数量为2^n,n为集合元素数量 int size = pow(2, s.size); // 用二进制位表示集合元素是否在子集中 for (int i = 0; i < size; i++) { printf("{ "); for (int j = 0; j < s.size; j++) { // 如果第j个元素在子集中,则输出 if (i & (1 << j)) { printf("%d ", s.set[j]); } } printf("}\n"); } } // 求一个集合的任意m元子集 void mSubset(Set s, int m) { // 子集元素数量为m int size = pow(2, s.size); // 用二进制位表示集合元素是否在子集中 for (int i = 0; i < size; i++) { // 统计子集元素数量 int count = 0; for (int j = 0; j < s.size; j++) { if (i & (1 << j)) { count++; } } // 如果子集元素数量等于m,则输出 if (count == m) { printf("{ "); for (int j = 0; j < s.size; j++) { if (i & (1 << j)) { printf("%d ", s.set[j]); } } printf("}\n"); } } } int main() { Set s1, s2, res; int m; inputSet(&s1); inputSet(&s2); printf("集合1:"); outputSet(s1); printf("集合2:"); outputSet(s2); printf("并集:"); res = unionSet(s1, s2); outputSet(res); printf("交集:"); res = intersectionSet(s1, s2); outputSet(res); printf("差集(s1-s2):"); res = differenceSet(s1, s2); outputSet(res); printf("幂集:\n"); powerSet(s1); printf("请输入任意m元子集中的m:\n"); scanf("%d", &m); printf("%d元子集:\n", m); mSubset(s1, m); return 0; } ``` 运行上述代码后,可以输入集合元素,然后实现集合的交集并集差集、幂集、任意m元子集的求解,并输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值