- images
- results
- .gitignore
- 1.1概论.ipynb
- 1.2 环境配置.pdf
- 1.3数据类型.ipynb
- 1.4 人机交互.ipynb
- 1.5 对象与变量.ipynb
- 1.6 编码与命名规范.ipynb
- 2.1 数值类型.ipynb
- 2.2 数值类型转换.ipynb
- 2.3 数值元算.ipynb
- 2.4常用数学运算函数.ipynb
- 2.5 math 模块及其应用.ipynb
- 2.6.1 逻辑值测试.ipynb
- 2.6.2 成员运算.ipynb
- 2.6.3 比较运算.ipynb
- 2.6.4 布尔运算.ipynb
- 2.6.5 运算优先级.ipynb
- 2.ipynb
- 3.1 流程控制结构.ipynb
- 3.3.1 for 循环语句.ipynb
- 3.3.3 rang.ipynb
- 3.3.3 while 循环语句.ipynb
- 3.4 and 3.5 分支结构和条件.ipynb
- 3.6 and 3.7 .ipynb
- 3.9 异常处理.ipynb
- 4 函数和模块化编程.ipynb
- 4.1 函数的定义、调用与返回值.ipynb
- 4.2 函数的参数传递.ipynb
- 4.3 变量的作用域.ipynb
- 4.4 匿名函数.ipynb
- 4.5 递归.ipynb
- 4.6 内置函数.ipynb
- 4.7 模块化程序设计.ipynb
- 5.1 序列通用操作.ipynb
- 5.1.1 索引.ipynb
- 5.1.2 切片.ipynb
- 5.1.3 序列拼接与重复.ipynb
- 5.1.4 成员测试.ipynb
- 5.2.1 字符串的创建.ipynb
- 5.2.2 字符串常量.ipynb
- 5.2.4 字符串的遍历.ipynb
- 5.2.5 文件遍历.ipynb
- 5.2.6 字符串的处理方法.ipynb
- 5.2.7 字符串格式化.ipynb
- 5.2.8 转义字符.ipynb
- 5.3 random 模块及其应用.ipynb
- 6.1 元组.ipynb
- 6.2 列表.ipynb
- 6.2.1 列表的创建.ipynb
- 6.2.2 列表的更新.ipynb
- 6.2.3 列表的删除.ipynb
- 6.2.4 列表的排序.ipynb
- 6.2.5 列表赋值与复制.ipynb
- 6.2.6 列表推导式.ipynb
- 6.2.8 常用内置函数.ipynb
- 6.2.9 列表嵌套及其排序.ipynb
- 6.3 列表综合应用.ipynb
- 7.1.1 集合的创建.ipynb
- 7.1.2可变集合类型的操作.ipynb
- 7.1.3 成员关系.ipynb
- 7.1.4 集合关系.ipynb
- 7.1.5 集合运算.ipynb
- 7.2.1 字典创建.ipynb
- 7.2.2 获取字典值.ipynb
- 7.2.3 修改字典值.ipynb
- 7.2.4内置函数与方法.ipynb
- 7.2.5字典排序输出.ipynb
- 7.3 集合与字典的应用.ipynb
- 8 中 numpy 概述.ipynb
- 8 中panda 库.ipynb
- 8.1 文件的打开与关闭.ipynb
- 8.2 文件读写操作.ipynb
- 8.3 文件的应用.ipynb
- 8.4 numpy 文件操作.ipynb
- 8.4.2 and 3.ipynb
- 8.5.1 pandas文件读写.ipynb
- 8.5.2 and 3 and 4.ipynb
- 9.1 matplotlib 线性图.ipynb
- 9.1.5 数据文化绘图.ipynb
- 9.2 非线性图.ipynb
- 9.3 词云.ipynb
- _overview.md
- _readme.ipynb
- coding_here.ipynb
- dream.png
- score.txt
- score_total.csv
- 成绩分析综合.json
7.1.4 集合关系.ipynb @master — view markup · raw · history · blame
7.4 集合关系¶
| 方法 | 符号 | 含义 |
|---|---|---|
| s.issubset(t) | s <= t | s是否是t的子集,是返回True,否则返回False 检测是否集合中的每个元素都在 t 之中。 |
| s < t | s是否是t的真子集,是返回True,否则返回False | |
| s.issuperset(t) | s >= t | s是否是t的超集,是返回True,否则返回False 检测是否t中的每个元素都在集合之中。 |
| s > t | s是否是t的真超集,是返回True,否则返回False | |
| s.isdisjoint(t) | s和t是否无共同元素,是返回True,否则返回False | |
| s == t | s是否和t相等,是返回True,否则返回False |
1. 集合等价/不等价¶
s == t:
集合 s 是否和集合 t 相等,是返回True,否则返回False。
如果集合s的任何一个元素都是集合t的元素,同时集合t的任何一个元素都是集合s的元素,我们就说集合s等于集合t。
In [1]:
s = set('python') #{'t', 'n', 'o', 'h', 'p', 'y'}
t = {'o', 'y', 'p', 'g'}
print(s == t) #False
print(s != t) #True

In [4]:
s = set('python') #{'t', 'n', 'o', 'h', 'p', 'y'}
u = frozenset(s) #frozenset({'p', 'y', 't', 'n', 'o', 'h'})
print(s == u) #True
s = set('posh')
t = set('shop')
print(s == t) # True
![]() |
![]() |
s.isdisjoint(t):
isdisjoint的方法可以判断s和t两个集合有没有相同的元素,如果没有相同元素,该方法返回True,否则该方法返回False
In [5]:
s = set('python') # {'t', 'n', 'o', 'h', 'p', 'y'}
t = set('java') # {'j', 'v', 'a'}
u = set('program') # {'m', 'r', 'g', 'p', 'a', 'o'}
print(s.isdisjoint(t)) # True
print(s.isdisjoint(u)) # False
print(t.isdisjoint(u)) # False
In [6]:
set1 = {'Java', 'Python', 'C++', 'Kotlin'}
set2 = {'Kotlin', 'Swift', 'Java', 'Dart'}
set3 = {'HTML', 'CSS', 'JavaScript'}
print(set1.isdisjoint(set2)) # False
print(set1.isdisjoint(set3)) # True

参数t可以接受任何可迭代对象,如字符串、列表、元组等。
In [9]:
s = set('python') # {'t', 'n', 'o', 'h', 'p', 'y'}
print(s.isdisjoint(['j', 'a', 'v', 'a'])) # 列表做参数,True
print(s.isdisjoint('program')) # 字符串做参数,False
2. 子集/超集¶
- s <= t :集合 s 是否是集合 t 的子集,是返回True,否则返回False。
- s < t : 集合 s 是否是集合 t 的真子集,是返回True,否则返回False。
- s >= t :集合 s 是否是集合 t 的超集,是返回True,否则返回False
- s > t : 集合 s 是否是集合 t 的真超集,是返回True,否则返回False
对于两个集合s与t,如果集合s中任意一个元素都是集合t的元素,那么集合s叫做集合t的子集,集合t叫做集合s的超集。
对于两个集合s与t,如果s是t的子集,且t中至少有一个元素不属于s,那么集合s叫做集合t的真子集,集合t叫做集合s的真超集。
In [13]:
s = set('shop') # {'h', 's', 'o', 'p'}
t = set('posh') # {'o', 'p', 's', 'h'}
u = set('bookshop') # {'o', 'k', 'h', 's', 'b', 'p'}
print(s < t) # s 不是 t 的真子集 ,False
print(u > s) # u 是 s 的真超集,True
print(s <= t) # s 是 t 的子集 ,True
print(s >= t) # s 是 t 的超集 ,True
- s.issubset(t):等价于s <= t
- s.issuperset(t):等价于s >= t
参数t可以接受任何可迭代对象,如字符串、列表、元组等。
In [19]:
s = set('shop') # {'h', 's', 'o', 'p'}
t = set('posh') # {'o', 'p', 's', 'h'}
print(s.issuperset(t)) # True
print(s.issubset('bookshop')) # True
print(t.issuperset('bookshop')) # False
实例1:二进制IP 地址转十进制¶
一个IP地址是由四个字节(每个字节8个位)的二进制数组成。请将32位二进制数表示的IP地址转换为十进制格式表示的IP地址输出。十进制格式的IP地址由用“.”分隔开4个十进制数组成(点分十进制表示法)。如果输入的数字不足32位或超过32位或输入的数字中有非0和1的数字时输出“data error!”
分析:
输入的字符串未必符合法,可能位数不是32,也可能包含其他字符,这里可以利用集合关系方便的判定输入中是否包括非'0'、'1' 的字符。
合法ip字符串 set(ip) 的结果只能是 {'0'}、 {'1'}、 {'0','1'}中的一个,且字符串长度应等于32。
输入输出示例:
| 输入 | 输出 |
|---|---|
| 00001010111100000000111110101010 | 10.240.15.170 |
| 11000000101010000000000011 | data error! |
| 11000000201010000000000000000004 | data error! |
In [22]:
def check_ip(ip_bin):
"""接受由二进制数表示IP的字符串,判定是否为合法IP,
当其合法时返回其对应的十进制IP,否则返回'data error!'
"""
if len(ip_bin) == 32 and set(ip_bin) <= {'0', '1'}:
ls = []
for i in range(4):
ls.append(str(int(ip_bin[i * 8:(i + 1) * 8], 2)))
ip_dec = '.'.join(ls)
return ip_dec # 输入合法时返回其对应的十进制IP
else:
return 'data error!' # 输入不合法时返回'data error!'
if __name__ == '__main__':
IP = input() # 输入二进制的IP地址字符串
print(check_ip(IP)) # 调用函数判定并完成IP转换

