集合

集合的特点:

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)

 

posted @ 2022-10-28 18:27  屠魔的少年  阅读(4)  评论(0)    收藏  举报