集合
集合的特点:
1.集合中不可以存储重复数据
2.集合中数据是无序的
3.集合中数据可以是任何不可变类型
4.集合可以根据需要动态伸缩
5.内存消耗较大
集合的创建
1.使用花括号 {}
s = {3, 5, 9, 2, 6}
# 集合中重复的元素会被去除掉
# 不能使用 {} 表示空集合,{} 表示空字典
print(type({}))
输出结果:
<class 'dict'>
2.调用内置函数
set (类set 的构造方法)
range 函数
print(set(range(1, 6)))
输出结果:
{1, 2, 3, 4, 5}
列表
print(set([3, 5, 9, 2, 6]))
输出结果:
{2, 3, 5, 6, 9}
元组
print(set((3, 5, 9, 2, 6)))
输出结果:
{2, 3, 5, 6, 9}
字符串形式,字符串是字符列表
print(set('35926'))
输出结果:
{'5', '2', '9', '3', '6'}
大括号形式
print(set({3, 5, 9, 2, 6}))
输出结果:
{2, 3, 5, 6, 9}
空集合
print(set())
输出结果:
set()
集合间的关系
返回值都是布尔值
两个集合是否相等( == 、 != )
s1 = {2, 4, 6, 8}
s2 = {8, 6, 2, 4}
print(s1 == s2)
输出结果:
True
issubset 一个集合是否是另一个集合的子集
set1 = {"刘德华","郭富城","张学友","赵云"}
set2 = {"赵云"}
res = set2.issubset(set1)
print(res)
# 简写
res = set2 < set1
print(res)
输出结果:
True
True
issuperset 一个集合是否是另一个集合的超集
set1 = {"刘德华","郭富城","张学友","赵云"}
set2 = {"赵云"}
res = set1.issuperset(set2)
print(res)
# 简写
res = set1 > set2
print(res)
输出结果:
True
True
isdisjoint 两个集合是否没有交集
set1 = {"刘德华","郭富城","张学友","赵云"}
set2 = {"赵云"}
res = set1.isdisjoint(set2)
print(res)
输出结果:
False
集合的数学操作
intersection & 两个集合的交集
交集后,生成一个新集合,原先两个集合不变
s1 = {1, 3, 5, 7}
s2 = {2, 3, 5, 8}
print(s1.intersection(s2))
print(s1 & s2) # 简写
print(s1)
输出结果:
{3, 5}
{3, 5}
{1, 3, 5, 7}
更新s1
s1 = {1, 3, 5, 7}
s2 = {2, 3, 5, 8}
print(s1.intersection_update(s2))
print(s1)
输出结果:
None
{3, 5}
union | 两个集合的并集
做并集后,生成一个新集合,原先的集合不变
s1 = {1, 3, 5, 7}
s2 = {2, 3, 5, 8}
print(s1.union(s2))
print(s1| s2) # 简写
输出结果:
{1, 2, 3, 5, 7, 8}
{1, 2, 3, 5, 7, 8}
difference - 两个集合的差集
做差集后,生成一个新集合,差集的两个集合不变
difference_update() 方法与 difference() 方法的区别在于
difference() 方法返回一个移除相同元素的新集合,
而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
s1 = {1, 3, 5, 7}
s2 = {2, 3, 5, 8}
print(s1.difference(s2))
print(s1 - s2) # 简写
print(s1.difference_update(s2))
print(s1)
输出结果:
{1, 7}
{1, 7}
None
{1, 7}
两个集合的对称差集 ^ symmetric_difference
symmetric_difference方法与symmetric_difference_update类似,都是计算两个集合不重复的部分,
区别是 symmetric_difference方法返回不重复元素组成的集合,
而 symmetric_difference_update用这个新集合更新原集合。
s1 = {1, 3, 5, 7}
s2 = {2, 3, 5, 8}
print(s1.symmetric_difference(s2))
print(s1 ^ s2) # 简写
print(s1.symmetric_difference_update(s2))
print(s1)
输出结果:
{1, 2, 7, 8}
None
{1, 2, 7, 8}
集合的查
使用运算符 in(not in )检查集合中是否存在(不存在)指定的元素。
集合的增
方法 add
一次只添加一个元素
s = {3, 2, 6}
s.add(8)
print(s)
输出结果:
{8, 2, 3, 6}
集合中已存在的元素不会被添加
方法 update
一次至少添加一个元素
s = {3, 2, 6}
列表
s.update([4, 9])
集合
s.update({4, 9})
元组
s.update((4, 9))
集合的删
调用方法remove
一次删除一个指定的元素
s = {3, 4, 5, 6}
s.remove(3)
print(s)
输出结果:
{4, 5, 6}
discard方法
一次只删一个指定的元素,不存在不报错
s = {3, 4, 5, 6}
s.discard(3)
print(s)
输出结果:
{4, 5, 6}
pop方法
一次只删一个任意元素,返回被删除元素
s = {3, 4, 5, 6}
print(s.pop())
print(s)
输出结果:
3
{4, 5, 6}
clear 方法
清空集合
s.clear()
列表或元祖的格式化format
方法一(推荐)
strvar = "{group1[0]}看了{group2[1]}一下,嘿嘿一笑".format(group1=["张三","李四","王五"] , group2 = ("赵一","孙二"))
print(strvar)
方法二(推荐)
注意一.如果该容器是字典,通过键取值时,不需要加引号
注意二.通过下标取值时,不能使用负号(逆向索引)
strvar = "{group1[zs]}看了{group2[1]}一下,嘿嘿一笑".format(group1={"zs":"张三","ls":"李四"} , group2 = ("赵一","孙二"))
print(strvar)
方法三
strvar = "{0[0]}看了{1[1]}一下,嘿嘿一笑".format(["张三","李四","王五"] , ("赵一","孙二"))
print(strvar)
浙公网安备 33010602011771号