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月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
100 1
思科设备巡检命令Python脚本大集合
|
2月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
47 5
|
2月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
53 6
|
2月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
38 2
|
2月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
38 3
|
1月前
set集合
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。 TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
1月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
1月前
|
Java 开发者
|
2月前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
47 4