Python集合

10 集合

10.1 集合的定义及基本操作

code:

# **********************************************************
"""
集合:确定的一组无序的数据的组合
 确定:当前集合中元素的值不能重复
 由多个数据组合的复合型数据(容器类型数据)
 无序的
 功能:成员检测,从序列中去除重复项以及数学中的集合类计算,例如交集、并集、差集和对称差集等等
集合的定义
 1.使用{}定义集合
 2.set()函数定义集合或强制类型转换
 3.集合推导式定义集合
 注意:集合中的元素不能重复,集合中存放的数据:Number,Strings,Tuple,冰冻集合。字典和列表不能作为集合的元素
 True在集合中表示为1,False在集合中表示为0。所以True和1只有一个能存在,False和0只有一个能存在。
 由于集合中的元素都不可以改变,因此不涉及到深拷贝的问题
集合的函数
 frozenset([iterable])---返回一个冰冻集合,冰冻集合不可更改。
 in---判断元素是否在集合中,在返回True,不在返回False
 not in---判断元素是否不在结合中,在返回False,不在返回True
 len(set)---返回集合set中的元素数量。
 set.add(elem)---将元素 elem 添加到集合中。返回值为None
 set.update(*others)---更新集合,添加来自others中的所有元素。返回值为None
 set.pop()---从集合中移除并返回任意一个元素。如果集合为空则会引发KeyError。
 set.remove(elem)---从集合中移除元素elem。如果elem不存在于集合中则会引发KeyError。返回值为None
 set.discard(elem)---如果元素elem存在于集合中则将其移除。所删元素不存在不会引发异常。返回值为None
 set.copy()---返回集合set()的浅拷贝
 set.clear()---从集合中移除所有元素。返回值为None
"""
print("集合的定义**************************************************")
setvar = {True,2,3,4,5,'abd',1,(1,2,3),9.99}
print(f"setvar = {setvar}")
setvar1 = set({1,2,3,'x','y',9.99})
print(f"setvar1 = {setvar1}")
setvar2 = set()
print(f"setvar2 = {setvar2}")
listvar = [2,5,'x']
print(f"listvar = {listvar}")
setvar3 = set(listvar)
print(f"setvar3 = {setvar3}")
setvar4 = frozenset(('jasmine','Booooo'))
setvar3.add(setvar4)  # 向集合中添加冰冻集合
print(f"setvar3 = {setvar3}")
print("集合的基本操作**************************************************")
print("in and not in**************************************************")
setvar5 = {True,2,'abd',1,(1,2,3),9.99,'Jasmine','Boly'}
print(f"setvar5 = {setvar5}")
print(f"'Jasmine' in setvar5 = {'Jasmine' in setvar5}")
print(f"'Jasmine' not in setvar5 = {'Jasmine' not in setvar5}")
print("len()**************************************************")
print(f"len(setvar5) = {len(setvar5)}")
print("add()**************************************************")
print(f"setvar5.add('Boo') = {setvar5.add('Boo')}")
print(f"setvar5 = {setvar5}")
print("update()**************************************************")
print(f"setvar5.update('Boo') = {setvar5.update('Boo')}")
print(f"setvar5.update('x','y') = {setvar5.update('x','y')}")
print(f"setvar5 = {setvar5}")
print("remove()**************************************************")
# print(f"setvar5.pop() = {setvar5.pop()}")
print(f"setvar5.remove('x') = {setvar5.remove('x')}")
print(f"setvar5 = {setvar5}")
print("discard()**************************************************")
print(f"setvar5.discard('y') = {setvar5.discard('y')}")
print(f"setvar5 = {setvar5}")
print(f"setvar5.discard('y') = {setvar5.discard('y')}")
print(f"setvar5 = {setvar5}")
print("copy()**************************************************")
setvar6 = setvar5.copy()
print(f"setvar6 = {setvar6}")
print("clear()**************************************************")
print(f"setvar5.clear() = {setvar5.clear()}")
print(f"setvar6.clear() = {setvar6.clear()}")
print(f"setvar5 = {setvar5},setvar6 = {setvar6}"

运行结果:

集合的定义**************************************************
setvar = {True, 2, 3, 4, 5, 9.99, (1, 2, 3), 'abd'}
setvar1 = {'y', 1, 'x', 2, 3, 9.99}
setvar2 = set()
listvar = [2, 5, 'x']
setvar3 = {'x', 2, 5}
setvar3 = {'x', frozenset({'jasmine', 'Booooo'}), 2, 5}
集合的基本操作**************************************************
in and not in**************************************************
setvar5 = {'Jasmine', True, 2, 'abd', 'Boly', 9.99, (1, 2, 3)}
'Jasmine' in setvar5 = True
'Jasmine' not in setvar5 = False
len()**************************************************
len(setvar5) = 7
add()**************************************************
setvar5.add('Boo') = None
setvar5 = {'Jasmine', True, 2, 'abd', 'Boo', 'Boly', 9.99, (1, 2, 3)}
update()**************************************************
setvar5.update('Boo') = None
setvar5.update('x','y') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'y', 'x', 'Boo', (1, 2, 3), 'o'}
remove()**************************************************
setvar5.remove('x') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'y', 'Boo', (1, 2, 3), 'o'}
discard()**************************************************
setvar5.discard('y') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'Boo', (1, 2, 3), 'o'}
setvar5.discard('y') = None
setvar5 = {True, 2, 'B', 9.99, 'Jasmine', 'Boly', 'abd', 'Boo', (1, 2, 3), 'o'}
copy()**************************************************
setvar6 = {True, 2, 'Boo', 'B', 9.99, (1, 2, 3), 'Jasmine', 'Boly', 'abd', 'o'}
clear()**************************************************
setvar5.clear() = None
setvar6.clear() = None
setvar5 = set(),setvar6 = set()

Process finished with exit code 0

10.2 冰冻集合

code:

# *************************************************************
"""
冰冻集合
 定义:frozenset()
 特点:冰冻集合一旦定义,不能做任何的修改
 冰冻集合只能做逻辑运算
 frozenset()本身就是一个强制转换类的函数,可以把其他任何容器类型的数据转为冰冻集合
 推导式:和其他推导式类似,
"""
print("冰冻集合定义**************************************************")
setvar = frozenset([1,2,'x','m',0,9])
print(f"setvar = {setvar}")
print("冰冻集合推导式**************************************************")
setvar2 = frozenset([i**2 for i in range(6)])
print(f"setvar2 = {setvar2}")

运行结果:

冰冻集合定义**************************************************
setvar = frozenset({0, 1, 2, 9, 'm', 'x'})
冰冻集合推导式**************************************************
setvar2 = frozenset({0, 1, 4, 9, 16, 25})

Process finished with exit code 0

10.3 集合推导式

code:

# ***************************************************************
"""
集合推导式:
 1.普通推导式
 2.带有条件表达式的推导式
 3.带有循环嵌套的推导式
"""
print("普通推导式**************************************")
setvar1 = {1,2,3,9,8}
print(f"setvar1 = {setvar1}")
setvar = {i**2 for i in setvar1}
print(f"setvar = {setvar}")
print("带有条件表达式的推导式**************************************")
setvar2 = {i**2 for i in setvar1 if i%2==0}
print(f"setvar2 = {setvar2}")
print("带有循环嵌套的推导式**************************************")
setvar3 = {1,2,3}
setvar4 = {4,5,6}
setvar5 = {i+j for i in setvar3 for j in setvar4}
print(f"setvar5 = {setvar5}")

运行结果:

普通推导式**************************************
setvar1 = {1, 2, 3, 8, 9}
setvar = {64, 1, 4, 9, 81}
带有条件表达式的推导式**************************************
setvar2 = {64, 4}
带有循环嵌套的推导式**************************************
setvar5 = {5, 6, 7, 8, 9}

Process finished with exit code 0

10.4 集合逻辑运算

image.png

code:

# *****************************************************
"""
集合逻辑运算:交& 并| 差集- 对称差^
 交集:
 set.intersection(*others)---set & other & ...返回一个新集合,其中包含原集合以及others指定的所有集合中共有的元素。
 set.intersection_update(*others)---set &= other & ...更新集合,只保留其中在所有others中也存在的元素。返回值为None
 并集:
 set.union(*others)---set | other | ...返回一个新集合,其中包含来自原集合以及others指定的所有集合中的元素。
 set.update(*others)---set |= other | ...更新集合,添加来自others中的所有元素。返回值为None
 差集:
 set.difference(*others)---set - other - ...返回一个新集合,其中包含原集合中在others指定的其他集合中不存在的元素。
 set.difference_update(*others)---set -= other | ...更新集合,移除其中也存在于others中的元素。返回值为None
 对称差:
 set.symmetric_difference(other)---set ^ other,返回一个新集合,其中的元素或属于原集合或属于other指定的其他集合,但不能同时属于两者。
 set.symmetric_difference_update(other)---set ^= other更新集合,只保留存在于集合的一方而非共同存在的元素。返回值为None
 检测超集和子集:
 set.issuperset(other)---set >= other,检测是否other中的每个元素都在集合set之中。
 set > other,检测集合是否为 other 的真超集,即 set >= other and set != other。
 set.issubset(other)---set <= other,检测是否集合中的每个元素都在other之中。
 set < other,检测集合是否为 other 的真子集,即 set <= other and set != other。
 两子集不相交:
 set.isdisjoint(other)---如果集合中没有与other共有的元素则返回True。当且仅当两个集合的交集为空集合时,两者为不相交集合。
"""
print("交集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 & vars2 = {vars1 & vars2}")
res = vars1.intersection(vars2)
print(f"vars1.intersection(vars2) = {res}")
res = vars1.intersection_update(vars2)
print(f"vars1.intersection_update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("并集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 | vars2 = {vars1 | vars2}")
res = vars1.union(vars2)
print(f"vars1.union(vars2) = {res}")
res = vars1.update(vars2)
print(f"vars1.update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("差集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 - vars2 = {vars1 - vars2}")
print(f"vars2 - vars1 = {vars2 - vars1}")
res = vars1.difference(vars2)
print(f"vars1.difference(vars2) = {res}")
res = vars1.difference_update(vars2)
print(f"vars1.difference_update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("对称差集*************************************")
vars1 = {1,2,3}
vars2 = {3,4,5,6}
print(f"vars1 ^ vars2 = {vars1 ^ vars2}")
res = vars1.symmetric_difference(vars2)
print(f"vars1.symmetric_difference(vars2) = {res}")
res = vars1.symmetric_difference_update(vars2)
print(f"vars1.symmetric_difference_update(vars2) = {res}")
print(f"vars1 = {vars1}")

print("检测超集和子集*************************************")
vars1 = {1,2,3}
vars2 = {1,2,3,4,5,6}
print(f"vars1 = {vars1}")
print(f"vars2 = {vars2}")
print(f"vars2.issuperset(vars1) = {vars2.issuperset(vars1)}")
print(f"vars1.issubset(vars2) = {vars1.issubset(vars2)}")

print("两子集不相交*************************************")
vars1 = {1,2,3}
vars2 = {4,5,6}
print(f"vars1.isdisjoint(vars2) = {vars1.isdisjoint(vars2)}")

运行结果:

D:/Prj/Python/Study_Basic_Grammar/_49set_logical_operator.py
交集*************************************
vars1 & vars2 = {3}
vars1.intersection(vars2) = {3}
vars1.intersection_update(vars2) = None
vars1 = {3}
并集*************************************
vars1 | vars2 = {1, 2, 3, 4, 5, 6}
vars1.union(vars2) = {1, 2, 3, 4, 5, 6}
vars1.update(vars2) = None
vars1 = {1, 2, 3, 4, 5, 6}
差集*************************************
vars1 - vars2 = {1, 2}
vars2 - vars1 = {4, 5, 6}
vars1.difference(vars2) = {1, 2}
vars1.difference_update(vars2) = None
vars1 = {1, 2}
对称差集*************************************
vars1 ^ vars2 = {1, 2, 4, 5, 6}
vars1.symmetric_difference(vars2) = {1, 2, 4, 5, 6}
vars1.symmetric_difference_update(vars2) = None
vars1 = {1, 2, 4, 5, 6}
检测超集和子集*************************************
vars1 = {1, 2, 3}
vars2 = {1, 2, 3, 4, 5, 6}
vars2.issuperset(vars1) = True
vars1.issubset(vars2) = True
两子集不相交*************************************
vars1.isdisjoint(vars2) = True

Process finished with exit code 0
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,726评论 8 114
  • 一个在IT领域摸爬滚打20多年的老程序员、软件架构师、高级培训讲师、IT作家。熟悉Java、Kotlin、Pyth...
    拾叁_2b72阅读 6,049评论 0 3
  • 一. 前置内容 本篇文章是对JVM 指令集的详解,为了防止读者没有接触过这方面内容,对读懂指令集的前置知识做一个简...
    wo883721阅读 7,946评论 0 3
  • 6.1.3 标识符 什么是标识符? 开发人员在程序中自定义的一些符号和名称 标识符是自己定义的,如变量名 、函数名...
    __65a0阅读 4,444评论 0 0
  • python总结 6.1.3 标识符 什么是标识符? 开发人员在程序中自定义的一些符号和名称 标识符是自己定义的,...
    G_eebd阅读 4,164评论 0 0

友情链接更多精彩内容