首页
学习
活动
专区
圈层
工具
发布

Python集合编程实践教程

1. Python集合基础

1.1 集合的定义与特性

集合(Set)是Python中用于存储无序、不重复元素的容器类型。其核心特性:

元素唯一性(自动去重)

无序存储(无索引访问)

支持数学集合运算

可变对象(frozenset为不可变版本)

1.2 集合创建方式

# 空集合

empty_set = set()

# 带初始值的集合

numbers = {1, 2, 3, 4}

# 从列表转换

colors = set(['red', 'blue', 'green'])

# 集合推导式

squares = {x**2 for x in range(10)}

表1 集合创建方法对比

2. 集合核心操作

2.1 基本操作方法添加元素

# add() 方法

fruits = {'apple', 'banana'}

fruits.add('orange')  # 添加单个元素

# update() 方法

fruits.update(['kiwi', 'mango'])  # 添加多个元素

删除元素

# remove() vs discard()

fruits.remove('apple')   # 元素不存在会报KeyError

fruits.discard('grape')  # 元素不存在不报错

# pop() 随机删除

random_fruit = fruits.pop()

# clear() 清空集合

fruits.clear()

2.2 集合运算

表2 集合运算符与方法对比

2.3 集合关系判断

A = {1, 2, 3}

B = {2, 3}

print(B.issubset(A))    # True

print(A.issuperset(B))  # True

print(A.isdisjoint({4,5}))  # True

3. 高级集合操作

3.1 集合推导式

# 生成不重复的随机数集合

import random

random_set = {random.randint(1, 100) for _ inrange(200)}

print(len(random_set))  # 结果<=100

# 过滤素数

defis_prime(n):

return n > 1andall(n % i for i inrange(2, int(n**0.5)+1))

prime_set = {x for x inrange(2, 100) if is_prime(x)}

3.2 frozenset不可变集合

immutable = frozenset([1, 2, 3])

try:

  immutable.add(4)

except AttributeError as e:

  print(e)  # 'frozenset' object has no attribute 'add'

4. 性能分析与优化

表3 操作时间复杂度对比

*注:列表的append操作时间复杂度为O(1)

典型应用场景

快速去重

成员关系测试

数据交并差运算

状态标记

5. 实践案例

案例1:文本处理

def count_unique_words(file_path):

  with open(file_path, 'r', encoding='utf-8') as f:

      return len({word.lower() for line in f for word in line.split()})

print(f"Unique words: {count_unique_words('article.txt')}")

案例2:用户标签系统

class UserTagSystem:

def__init__(self):

self.users = {}

defadd_tags(self, user_id, *tags):

if user_id notinself.users:

self.users[user_id] = set()

self.users[user_id].update(tags)

defcommon_tags(self, user1, user2):

returnself.users[user1] & self.users[user2]

# 使用示例

system = UserTagSystem()

system.add_tags(1, 'python', 'coding', 'music')

system.add_tags(2, 'python', 'travel')

print(system.common_tags(1, 2))  # {'python'}

6. 扩展应用

使用sympy进行数学集合运算

from sympy import FiniteSet, Union, Intersection

A = FiniteSet(1, 2, 3)

B = FiniteSet(2, 3, 4)

print(Union(A, B))      # {1, 2, 3, 4}

print(Intersection(A, B))  # {2, 3}

7. 学习路线图

8. 总结

集合编程优势:

高效去重和成员检测

直观的数学运算表达

内存使用优化

使用注意事项:

不要依赖元素顺序

只能存储可哈希对象

大型集合操作注意内存消耗

扩展学习方向:

数据库中的集合操作

分布式集合处理

集合论在算法中的应用

更新日期:2025-05-24

交流讨论:欢迎在评论区留言!

重要提示:本文主要是记录自己的学习与实践过程,所提内容或者观点仅代表个人意见,只是我以为的,不代表完全正确,不喜请勿关注。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OVlu4t5iVbwNrwNfJwruHq0A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券