大家好,这次带来的是关于集合和元组的基础知识,准备好了吗?各位旅行者,枫丹即将开船啦!
目录
一.集合
1.什么是集合,它有什么特性
在Python中,集合(Set)是一种无序、可变的数据结构,用于存储唯一的元素。集合中的元素不会重复,且没有固定的顺序。
集合的主要特性包括:
-
唯一性:集合中的元素是唯一的,不会存在重复的元素。如果尝试向集合中添加已存在的元素,集合不会发生改变。
-
无序性:集合中的元素没有固定的顺序,无法通过索引访问。每次遍历集合时,元素的顺序可能会发生变化。
-
可变性:集合是可变的,可以添加、删除和修改元素。可以使用方法如
add()
添加单个元素,update()
添加多个元素,remove()
删除元素等。 -
支持数学运算:集合支持常见的数学集合运算,如并集、交集、差集和对称差集。可以使用方法如
union()
、intersection()
、difference()
和symmetric_difference()
进行操作。 -
可迭代性:集合是可迭代的,可以使用循环遍历集合中的元素。
2.如何创建集合
1.使用set函数进行创建
set1 = set() # 创建一个空集合
set2 = set(['apple', 'banana', 'orange']) # 将列表里面的元素改为集合
可以作为参数传入set的,有以下几种:
-
可迭代对象(Iterable):可以将一个可迭代对象(如列表、元组、字符串等)作为参数传递给
set()
函数,它会将可迭代对象中的元素作为集合的元素。例如:numbers = set([1, 2, 3, 4, 5]) # 使用列表作为参数 print(numbers) # 输出: {1, 2, 3, 4, 5} vowels = set('aeiou') # 使用字符串作为参数 print(vowels) # 输出: {'a', 'e', 'i', 'o', 'u'}
-
字典(Dictionary):可以将字典作为参数传递给
set()
函数,它会将字典的键作为集合的元素。例如:data = {'a': 1, 'b': 2, 'c': 3} keys = set(data) print(keys) # 输出: {'a', 'b', 'c'}
-
其他集合(Set):可以将另一个集合作为参数传递给
set()
函数,它会创建一个与原集合相同的新集合。例如:set1 = {1, 2, 3} set2 = set(set1) print(set2) # 输出: {1, 2, 3}
需要注意的是,
set()
函数的参数必须是可哈希的(即不可变的),因为集合的元素必须是可哈希的。例如,以下代码会引发错误:# 错误的示例 invalid_set = set({[1, 2], [3, 4]}) # 列表作为元素,会引发错误
2.使用{}进行创建
使用大括号 {}
创建集合时,可以直接将元素用逗号分隔,并将它们放在大括号内。例如:
fruits = {'apple', 'banana', 'orange'}
注意,当使用空的大括号
{}
创建对象时,默认创建的是一个空的字典(Dictionary),而不是一个空的集合。要创建一个空的集合,需要使用set()
函数。
3.对于集合元素的操作
1.添加元素
-
add(element)
:向集合中添加一个元素。如果该元素已经存在于集合中,则不会进行任何操作。例如:fruits = {'apple', 'banana', 'orange'} fruits.add('grape') print(fruits) # 输出: {'apple', 'banana', 'orange', 'grape'}
-
update(*others)
:向集合中添加多个元素,可以传递多个参数,每个参数可以是集合、列表、元组或其他可迭代对象。例如:fruits = {'apple', 'banana', 'orange'} fruits.update(['grape', 'kiwi']) print(fruits) # 输出: {'apple', 'banana', 'orange', 'grape', 'kiwi'} numbers = {1, 2, 3} numbers.update((4, 5, 6)) print(numbers) # 输出: {1, 2, 3, 4, 5, 6}
2.删除元素
-
remove(element)
:从集合中移除指定的元素。如果要移除的元素不存在于集合中,会引发KeyError
异常。例如:fruits = {'apple', 'banana', 'orange'} fruits.remove('banana') print(fruits) # 输出: {'apple', 'orange'}
-
discard(element)
:从集合中移除指定的元素。如果元素不存在于集合中,它不会引发异常。例如:fruits = {'apple', 'banana', 'orange'} fruits.discard('grape') # 元素不存在,不会引发异常 print(fruits) # 输出: {'apple', 'banana', 'orange'}
-
pop()
:从集合中移除并返回一个随机的元素。由于集合是无序的,无法确定具体移除的是哪个元素。如果集合为空,会引发KeyError
异常。例如:fruits = {'apple', 'banana', 'orange'} removed_fruit = fruits.pop() print(removed_fruit) # 随机输出一个元素 print(fruits) # 输出: 随机移除的元素不在集合中的新集合
-
clear()
:从集合中移除所有元素,使其变为空集合。例如:fruits = {'apple', 'banana', 'orange'} fruits.clear() print(fruits) # 输出: set()
4.集合与集合间的操作及其判断
1.集合与集合的操作
-
并集(Union):将两个集合中的所有元素合并成一个新的集合。可以使用
union()
方法或|
运算符来执行并集操作。例如:set1 = {1, 2, 3} set2 = {3, 4, 5} union_set = set1.union(set2) # 或者使用运算符 # union_set = set1 | set2 print(union_set) # 输出: {1, 2, 3, 4, 5}
-
交集(Intersection):获取两个集合中共有的元素。可以使用
intersection()
方法或&
运算符来执行交集操作。例如:set1 = {1, 2, 3} set2 = {3, 4, 5} intersection_set = set1.intersection(set2) # 或者使用运算符 # intersection_set = set1 & set2 print(intersection_set) # 输出: {3}
-
差集(Difference):获取一个集合中存在,而另一个集合中不存在的元素。可以使用
difference()
方法或-
运算符来执行差集操作。例如:set1 = {1, 2, 3} set2 = {3, 4, 5} difference_set = set1.difference(set2) # 或者使用运算符 # difference_set = set1 - set2 print(difference_set) # 输出: {1, 2}
-
对称差集(Symmetric Difference):获取两个集合中互相不存在的元素。可以使用
symmetric_difference()
方法或^
运算符来执行对称差集操作。例如:set1 = {1, 2, 3} set2 = {3, 4, 5} symmetric_difference_set = set1.symmetric_difference(set2) # 或者使用运算符 # symmetric_difference_set = set1 ^ set2 print(symmetric_difference_set) # 输出: {1, 2, 4, 5}
2.集合间的判断
-
判断子集和超集:
issubset()
方法用于判断一个集合是否是另一个集合的子集。issuperset()
方法用于判断一个集合是否是另一个集合的超集。
set1 = {1, 2, 3} set2 = {1, 2, 3, 4, 5} print(set1.issubset(set2)) # 输出: True print(set2.issuperset(set1)) # 输出: True
-
判断两个集合是否没有交集:
isdisjoint()
方法用于判断两个集合是否没有共同的元素。
set1 = {1, 2, 3} set2 = {4, 5, 6} print(set1.isdisjoint(set2)) # 输出: True
当然,除了函数还有运算符或关键字的实现方法,例如:
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
# 判断 set1 是否是 set2 的子集
print(set1 <= set2) # 输出: True
# 或者使用关键字 in
print(set1 in set2) # 输出: False
# 判断 set2 是否是 set1 的超集
print(set2 >= set1) # 输出: True
# 或者使用关键字 in
print(set2 in set1) # 输出: False
5.集合一般在什么场景下使用
在算法竞赛中,集合常见的应用场景包括:
-
图论算法:在图论算法中,集合可以用来表示图的节点集合、边集合等。例如,你可以使用集合来存储已访问过的节点,以避免重复访问;或者使用集合来存储边的集合,以进行边的遍历和操作。
-
搜索算法:在搜索算法中,集合可以用来存储已经访问过的状态或节点,以避免重复搜索相同的状态。这在深度优先搜索(DFS)、广度优先搜索(BFS)等算法中非常常见。
-
动态规划算法:在动态规划算法中,集合可以用来存储状态的集合,以及进行状态转移和状态更新。例如,你可以使用集合来存储已经计算过的子问题的状态,以避免重复计算。
-
贪心算法:在贪心算法中,集合可以用来存储已选择的元素或解集合,以及进行贪心选择的判断。例如,在背包问题中,你可以使用集合来存储已选择的物品,以及根据贪心策略进行物品的选择和判断。
在工作项目中,集合的应用也是多样的,具体取决于项目的需求和领域。以下是一些常见的应用场景:
-
数据处理和清洗:在数据处理和清洗的项目中,集合可以用来去重、筛选和过滤数据。你可以使用集合来存储已经处理过的数据,以确保数据的唯一性,并进行数据的清洗和转换。
-
数据分析和统计:在数据分析项目中,集合可以用来进行数据的聚合、分组和统计。你可以使用集合来统计不同类别的数据数量,计算数据的交集、并集等操作,从而进行数据分析和洞察。
-
数据库操作:在与数据库交互的项目中,集合可以用来处理查询结果的唯一性和去重,以及处理多个查询结果的交集、并集等操作。
-
项目管理和任务分配:在项目管理中,集合可以用来存储项目的任务集合、成员集合等。你可以使用集合来管理和分配任务,进行成员的添加和移除等操作。