Python刷题系列(5)_set集合

Pyhton set集合

set 是一个不允许内容重复的组合,而且set里的内容位置是无序的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

注:
【1】Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:{element1,element2,…,elementn}。
【2】set对字符串也会去重,因为字符串属于序列。
【3】特点:
(1) 无序性:set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。
(2) 确定性
(3) 不重复性
【4】 从内容上看,同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。

#1.set对字符串也会去重,因为字符串属于序列。
str1 = set("abcdefgabcdefghi")
str2 = set("abcdefgabcdefgh")
print(str1,str2)
print(str1 - str2) #-号可以求差集
print(str2-str1)  #空值
#print(str1+str2)  #set里不能使用+号
====================================================================
{'d', 'i', 'e', 'f', 'a', 'g', 'b', 'h', 'c'} {'d', 'e', 'f', 'a', 'g', 'b', 'h', 'c'}
{'i'}
set()

【5】set增删查改操作

#1.给set集合增加数据
person ={"student","teacher","babe",123,321,123}
person.add("student") #如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,去别update
print(person)
person.add((1,23,"hello")) #可以添加元组,但不能是list
print(person)
'''
{321, 'babe', 'teacher', 'student', 123}
{(1, 23, 'hello'), 321, 'babe', 'teacher', 'student', 123}
'''
 
person.update((1,3)) #可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分
print(person)
person.update("abc")#也是增加元素
print(person)  #会将字符串拆分成a,b,c三个元素
'''
{321, 1, 3, 'teacher', (1, 23, 'hello'), 'babe', 'student', 123}
{321, 1, 3, 'b', 'c', 'teacher', (1, 23, 'hello'), 'a', 'babe', 'student', 123}
'''
 
#2.从set里删除数据
person.remove("student")#按元素去删除
print(person)
#print("student")如果不存在 ,会报错。
'''
{321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123}
'''
person.discard("student")#功能和remove一样,好处是没有的话,不会报错
person.pop() #在list里默认删除最后一个,在set里随机删除一个。
print(person)
'''
{1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'}
'''
#3.更新set中某个元素,因为是无序的,所以不能用角标
#所以一般更新都是使用remove,然后在add
 
#4.查询是否存在,无法返回索引,使用in判断
if "teacher" in person:
    print("true")
else:
    print("不存在")
'''
true
'''
#5.终极大招:直接清空set
print(person)
person.clear()
print(person)
'''
set()
'''

1、创建一个新的空集

要创建一个空集,你必须使用 set(),而不是 {};后者创建了一个空字典。

创建一个空字典:

print("Create a new set:")
x = set()
print(x)
print(type(x))

'''
Create a new set:
set()
<class 'set'>
'''

创建一个非空字典:

print("Create a non empty set:")
n = set([0, 1, 2, 3, 4])
print(n)
print(type(n))

'''
Create a non empty set:
{0, 1, 2, 3, 4}
<class 'set'>
'''
print("Using a literal:")
a = {1,2,3,'foo','bar'}
print(type(a))
print(a)

'''
Using a literal:
<class 'set'>
{1, 2, 3, 'bar', 'foo'}
'''

2、迭代集合

编写一个 Python 程序来迭代集合。

【1】循环访问不带索引的集合
在这里插入图片描述
字符串是无序的:

char_set = set("abcdefg")  
for val in char_set:
    print(val, end=' ')
    
#e f d c a b g  (无序的)

set里面的列表是有序的:

num_set = set([0, 1, 2, 3, 4, 5])
for n in num_set:
  print(n, end=' ')
print(type(num_set))
# 0 1 2 3 4 5 <class 'set'>

【2】循环访问带索引的集合

char_set = set("abcdefg")  
print(char_set)
char_set = list(char_set)  
print(char_set)
for id in range(len(char_set)):
    print(char_set[id], end=' ')
'''
{'b', 'e', 'c', 'd', 'f', 'a', 'g'}
['b', 'e', 'c', 'd', 'f', 'a', 'g']
b e c d f a g 
'''

在这里插入图片描述

3、在集合中添加成员

【1】add
1、添加元素
2、可以添加元组,但不能是list
3、如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,区别于update

【2】update
1、可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分

#空集合
color_set = set()
print(color_set)
print("add添加一个元素:")
color_set.add("Red")

print(color_set)
print("可以使用update添加一些元组、列表、字典等:")
color_set.update(["Blue", "Green"])
print(color_set)# 但使用update添加字符串会进行拆分
'''
set()
add添加一个元素:
{'Red'}
可以使用update添加一些元组、列表、字典等:
{'Red', 'Green', 'Blue'}
'''

4、从 Python 集中删除成员

编写一个 Python 程序以从给定集合中删除项目。
【1】remove
【2】pop
【3】discard

#从set里删除数据
person.remove("student")#按元素去删除
print(person)
#print("student")如果不存在 ,会报错。
'''
{321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123}
'''
person.discard("student")#功能和remove一样,好处是没有的话,不会报错
person.pop() #在list里默认删除最后一个,在set里随机删除一个。
print(person)
'''
{1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'}
'''

5、存在则从该集合中删除该成员

编写一个 Python 程序,以从集合中删除某个项(如果该集合中存在该项)。

分析:也就是集合中没有此元素的时候,删除不会报错,使用函数discard

#Create a new set
num_set = set([1, 2, 3, 4, 5, 6])
print("Original set elements:")
print(num_set)
print("\nRemove 4 from the said set:")
num_set.discard(4)#将元素4删除
print(num_set)
print("\nRemove 5 from the said set:")
num_set.discard(5)#将元素5删除
print(num_set)
print("\nRemove 15 from the said set:")
num_set.discard(15)
print(num_set)# 不会报错

'''
Original set elements:
{1, 2, 3, 4, 5, 6}

Remove 4 from the said set:
{1, 2, 3, 5, 6}

Remove 5 from the said set:
{1, 2, 3, 6}

Remove 15 from the said set:
{1, 2, 3, 6
'''

6、集合的交集

在这里插入图片描述

setx = set(["green", "blue"])
sety = set(["blue", "yellow"])
print("Original set elements:")
print(setx)
print(sety)
print("\nIntersection of two said sets:")
setz = setx & sety
print(setz)

'''
Original set elements:
{'green', 'blue'}
{'blue', 'yellow'}

Intersection of two said sets:
{'blue'}
'''

7、集合的并集

在这里插入图片描述

setc1 = set(["green", "blue"])
setc2 = set(["blue", "yellow"])
setc = setc1.union(setc2)
print("\nUnion of above sets:")
print(setc)
setn1 = set([1, 1, 2, 3, 4, 5])
setn2 = set([1, 5, 6, 7, 8, 9])
print("\nUnion of above sets:")
setn = setn1.union(setn2)
print(setn)

'''
Union of above sets:
{'green', 'blue', 'yellow'}

Union of above sets:
{1, 2, 3, 4, 5, 6, 7, 8, 9}
'''

8、创建集合差异

方法一:使用difference函数

setc1 = set(["green", "blue"])
setc2 = set(["blue", "yellow"])
r1 = setc1.difference(setc2)
print("\nDifference of setc1 - setc2:")
print(r1)
r2 = setc2.difference(setc1)
print("\nDifference of setc2 - setc1:")
print(r2)
'''
Difference of setc1 - setc2:
{'green'}

Difference of setc2 - setc1:
{'yellow'}
'''

方法二:使用减号

setc1 = set(["green", "blue"])
setc2 = set(["blue", "yellow"])
r1 = setc1 - setc2
print("\nDifference of setc1 - setc2:")
print(r1)
r2 = setc2 - setc1
print("\nDifference of setc2 - setc1:")
print(r2)

'''
Difference of setc1 - setc2:
{'green'}

Difference of setc2 - setc1:
{'yellow'}
'''

方法三:差分() 方法中的多个集合

setn1 = set([1, 1, 2, 3, 4, 5])
setn2 = set([1, 5, 6, 7, 8, 9])
setn3 = set([3, 4, 5, 3, 9, 10])
setn4 = set([5, 7, 9, 10, 12, 14])
print("\nDifference of setn1 - setn2,setn3,setn4:")
r1 = setn1.difference(setn2,setn3,setn4)
print(r1)
print("\nDifference of setn4 - setn1,setn2,setn3:")
r2 = setn4.difference(setn1,setn2,setn3)
print(r2)

'''
Difference of setn1 - setn2,setn3,setn4:
{2}

Difference of setn4 - setn1,setn2,setn3:
{12, 14}
'''

9、检查一个集合是否是另一个集合的子集

在这里插入图片描述
【1】使用<=
【2】使用issubset

setx = set(["apple", "mango"])
sety = set(["mango", "orange"])
setz = set(["mango"])
print("If x is subset of y:")
print(setx <= sety)
print(setx.issubset(sety))

print("If y is subset of x:")
print(sety <= setx)
print(sety.issubset(setx))

print("\nIf y is subset of z:")
print(sety <= setz)
print(sety.issubset(setz))

print("If z is subset of y:")
print(setz <= sety)
print(setz.issubset(sety))

'''
If x is subset of y:
False
False
If y is subset of x:
False
False

If y is subset of z:
False
False
If z is subset of y:
True
True
'''

10、从给定的集合中删除所有元素

编写一个Python程序以从给定的集合中删除所有元素。

setc = {"Red", "Green", "Black", "White"}    
setc.clear()
print(setc)
# set()

在这里插入图片描述

11、在一个集合中查找最大值和最小值

在这里插入图片描述

#Create a set
setn = {5, 10, 3, 15, 2, 20}
print("Original set elements:")
print(setn)
print(type(setn))
print("\nMaximum value of the said set:")
print(max(setn))
print("\nMinimum value of the said set:")
print(min(setn))

'''
Original set elements:
{2, 3, 20, 5, 10, 15}
<class 'set'>

Maximum value of the said set:
20

Minimum value of the said set:
2
'''

12、查找集合的长度

编写一个 Python 程序来查找集合的长度。

#Create a set
setn = {5, 10, 3, 15, 2, 20}
print("Original set elements:")
print(setn)
print(type(setn))
print("Length of the said set:")
print(len(setn))

setn = {5, 5, 5, 5, 5, 5}
print("\nOriginal set elements:")
print(setn)
print(type(setn))
print("Length of the said set:")
print(len(setn))

'''
Original set elements:
{2, 3, 20, 5, 10, 15}
<class 'set'>
Length of the said set:
6

Original set elements:
{5}
<class 'set'>
Length of the said set:
1
'''

在这里插入图片描述

13、检查给定值是否存在于集合中

使用innot in

nums = {1, 3, 5, 7, 9, 11}
print("Test if 7 exists in nums:")
print(7 in nums)

print("Test if 6 is not in nums")
print(6 not in nums)

'''
Test if 7 exists in nums:
True
Test if 6 is not in nums
True
'''

14、检查两个给定的集合是否没有共同的元素

【1】isdisjoint
  • isdisjoint的功能
    判断两个集合是否包含相同的元素,如果没有返回True,否则返回False

  • isdisjoint的用法
    【1】语法:a_set.isdisjoint(b_set)
    【2】参数:b_set:与当前集合用来判断的集合
    【3】返回值:返回一个布尔值True或False

x = {1,2,3,4}
y = {4,5,6,7}
z = {8}
print("\nConfirm two given sets have no element(s) in common:")
print("\nCompare x and y:")
print(x.isdisjoint(y))
print("\nCompare x and z:")
print(z.isdisjoint(x))
print("\nCompare y and z:")
print(y.isdisjoint(z))

'''
Confirm two given sets have no element(s) in common:

Compare x and y:
False

Compare x and z:
True

Compare y and z:
True
'''

15、从第一组中删除第二组的交集

【2】difference_update

difference_update() 方法用于移除两个集合中都存在的元素。

difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。

difference()移除元素后,需要一个新的“容器”去“承载”返回值。而difference_update() 是对集合的直接修改。

sn1 = {1,2,3,4,5}
sn2 = {4,5,6,7,8}
print("\nsn1中移除相同的元素,sn2不变")
sn1.difference_update(sn2)
print("sn1: ",sn1)
print("sn2: ",sn2)

'''
sn1中移除相同的元素,sn2不变
sn1:  {1, 2, 3}
sn2:  {4, 5, 6, 7, 8}
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温欣2030

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值