Python刷题系列(5)_set集合(上)

简介: set 是一个不允许内容重复的组合,而且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】循环访问不带索引的集合

5c1c335b4bed4626acb414864de0e921.png

字符串是无序的:

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 
'''

a1a78d30391b44058dc9d74398d0cbd0.png


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、集合的交集

fdbdc15b1f784821b08eab73b5303b30.png

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、集合的并集


image.png

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}
'''


相关文章
|
3天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
21 0
|
3天前
|
程序员 索引 Python
06-python数据容器-set(集合)入门基础操作
06-python数据容器-set(集合)入门基础操作
|
4天前
|
Python
python学习8-集合
python学习8-集合
|
28天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 内置命令】⭐⭐⭐Linux 设置或修改shell环境变量set命令 使用指南
【Shell 命令集合 系统设置 内置命令】⭐⭐⭐Linux 设置或修改shell环境变量set命令 使用指南
29 0
|
28天前
|
Python
掌握Python中的集合推导式
掌握Python中的集合推导式
|
28天前
|
Python
探索Python集合推导式的进阶应用
探索Python集合推导式的进阶应用
|
28天前
|
存储 数据处理 Python
深入剖析Python集合推导式的独特之处
深入剖析Python集合推导式的独特之处
|
28天前
|
数据处理 Python
Python集合推导式的优雅与实用
Python集合推导式的优雅与实用
|
28天前
|
数据采集 算法 数据处理
Python集合推导式的深度探索与实际应用
Python集合推导式的深度探索与实际应用
|
28天前
|
数据处理 Python
Python集合推导式7
Python集合推导式7