【Python】——集合

本文详细介绍了Python中的集合概念,包括其特性、创建方法、元素添加和删除、集合间运算以及在算法竞赛和项目中的应用场景,如图论、搜索算法、数据分析和项目管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,这次带来的是关于集合和元组的基础知识,准备好了吗?各位旅行者,枫丹即将开船啦!

4a49b210db8b495d8aafdcc16626d296.webp

目录

一.集合

1.什么是集合,它有什么特性

2.如何创建集合

1.使用set函数进行创建

  2.使用{}进行创建

3.对于集合元素的操作

1.添加元素

2.删除元素

4.集合与集合间的操作及其判断

1.集合与集合的操作

2.集合间的判断

5.集合一般在什么场景下使用

一.集合

1.什么是集合,它有什么特性

在Python中,集合(Set)是一种无序、可变的数据结构,用于存储唯一的元素。集合中的元素不会重复,且没有固定的顺序。

集合的主要特性包括:

  1. 唯一性:集合中的元素是唯一的,不会存在重复的元素。如果尝试向集合中添加已存在的元素,集合不会发生改变。

  2. 无序性:集合中的元素没有固定的顺序,无法通过索引访问。每次遍历集合时,元素的顺序可能会发生变化。

  3. 可变性:集合是可变的,可以添加、删除和修改元素。可以使用方法如 add() 添加单个元素,update() 添加多个元素,remove() 删除元素等。

  4. 支持数学运算:集合支持常见的数学集合运算,如并集、交集、差集和对称差集。可以使用方法如 union()intersection()difference() 和 symmetric_difference() 进行操作。

  5. 可迭代性:集合是可迭代的,可以使用循环遍历集合中的元素。

2.如何创建集合

1.使用set函数进行创建

set1 = set() # 创建一个空集合
set2 = set(['apple', 'banana', 'orange']) # 将列表里面的元素改为集合

可以作为参数传入set的,有以下几种:

  1. 可迭代对象(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'}
    
  2. 字典(Dictionary):可以将字典作为参数传递给 set() 函数,它会将字典的键作为集合的元素。例如:

    data = {'a': 1, 'b': 2, 'c': 3}
    keys = set(data)
    print(keys)  # 输出: {'a', 'b', 'c'}
    
  3. 其他集合(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.集合一般在什么场景下使用

在算法竞赛中,集合常见的应用场景包括:

  1. 图论算法:在图论算法中,集合可以用来表示图的节点集合、边集合等。例如,你可以使用集合来存储已访问过的节点,以避免重复访问;或者使用集合来存储边的集合,以进行边的遍历和操作。

  2. 搜索算法:在搜索算法中,集合可以用来存储已经访问过的状态或节点,以避免重复搜索相同的状态。这在深度优先搜索(DFS)、广度优先搜索(BFS)等算法中非常常见。

  3. 动态规划算法:在动态规划算法中,集合可以用来存储状态的集合,以及进行状态转移和状态更新。例如,你可以使用集合来存储已经计算过的子问题的状态,以避免重复计算。

  4. 贪心算法:在贪心算法中,集合可以用来存储已选择的元素或解集合,以及进行贪心选择的判断。例如,在背包问题中,你可以使用集合来存储已选择的物品,以及根据贪心策略进行物品的选择和判断。

在工作项目中,集合的应用也是多样的,具体取决于项目的需求和领域。以下是一些常见的应用场景:

  1. 数据处理和清洗:在数据处理和清洗的项目中,集合可以用来去重、筛选和过滤数据。你可以使用集合来存储已经处理过的数据,以确保数据的唯一性,并进行数据的清洗和转换。

  2. 数据分析和统计:在数据分析项目中,集合可以用来进行数据的聚合、分组和统计。你可以使用集合来统计不同类别的数据数量,计算数据的交集、并集等操作,从而进行数据分析和洞察。

  3. 数据库操作:在与数据库交互的项目中,集合可以用来处理查询结果的唯一性和去重,以及处理多个查询结果的交集、并集等操作。

  4. 项目管理和任务分配:在项目管理中,集合可以用来存储项目的任务集合、成员集合等。你可以使用集合来管理和分配任务,进行成员的添加和移除等操作。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值