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


相关文章
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
178 1
|
3月前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
133 0
|
4月前
|
存储 索引 Python
python 集合的所有基础知识
python 集合的所有基础知识
199 0
|
2月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
160 4
|
3月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
348 2
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
528 1
思科设备巡检命令Python脚本大集合
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
190 6
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
133 5
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
165 2
|
8月前
|
存储 缓存 安全
Python frozenset 集合详解:不可变集合的终极指南
frozenset是Python中一个常被忽视但极具价值的不可变集合类型。本文深入解析其本质、操作方法与应用场景,揭示其通过不可变性带来的安全性与性能优势。从底层实现到实战案例,涵盖字典键使用、缓存优化及类型注解等高级场景。同时对比性能数据,提供最佳实践指南,并展望Python 3.11+中的优化。掌握frozenset,可为代码带来更强健性与效率,适合多种特定需求场景。
302 5

推荐镜像

更多