Python集合案例如何创建使用

wen python案例 28

本文目录导读:

Python集合案例如何创建使用

  1. 集合的创建
  2. 基本操作案例
  3. 实用案例
  4. 常用方法速查
  5. 注意事项

我来详细介绍Python集合的创建和使用方法,通过实际案例让你快速掌握。

集合的创建

# 方法1:使用花括号
fruits = {'apple', 'banana', 'orange', 'apple'}  # 重复元素会被自动去重
print(fruits)  # {'orange', 'banana', 'apple'}
# 方法2:使用set()函数
numbers = set([1, 2, 3, 4, 5, 3, 2])  # 列表转集合
print(numbers)  # {1, 2, 3, 4, 5}
# 创建空集合
empty_set = set()  # 注意:{} 创建的是空字典
print(type(empty_set))  # <class 'set'>

基本操作案例

添加和删除元素

# 创建一个集合
students = {'张三', '李四', '王五'}
# 添加元素
students.add('赵六')
print(students)  # {'张三', '李四', '王五', '赵六'}
# 批量添加
students.update(['小明', '小红'])
print(students)  # {'小明', '小红', '张三', '李四', '王五', '赵六'}
# 删除元素
students.remove('张三')  # 元素不存在会报错
students.discard('不存在的人')  # 元素不存在不会报错
popped = students.pop()  # 随机删除并返回一个元素
print(f"被删除的元素: {popped}")

集合运算

# 数学和编程的共同爱好
math_lovers = {'小明', '小红', '张三', '李四'}
program_lovers = {'小明', '王五', '赵六', '张三'}
# 交集 - 既喜欢数学又喜欢编程的人
both = math_lovers & program_lovers
print(f"交集: {both}")  # {'小明', '张三'}
# 并集 - 所有学生
all_students = math_lovers | program_lovers
print(f"并集: {all_students}")
# 差集 - 只喜欢数学,不喜欢编程的人
only_math = math_lovers - program_lovers
print(f"只喜欢数学: {only_math}")  # {'小红', '李四'}
# 对称差集 - 只喜欢其中一门的人
only_one = math_lovers ^ program_lovers
print(f"只喜欢一门: {only_one}")  # {'王五', '赵六', '小红', '李四'}

实用案例

案例1:数据去重

# 从列表中去除重复元素
data = [1, 2, 3, 2, 1, 4, 5, 3, 6, 4]
unique_data = list(set(data))
print(f"去重后: {unique_data}")  # [1, 2, 3, 4, 5, 6]
# 统计文章中不同单词的数量
text = "hello world hello python world python programming"
words = text.split()
unique_words = set(words)
print(f"不同单词数量: {len(unique_words)}")  # 4
print(f"不同单词: {unique_words}")

案例2:会员系统

# 会员管理
vip_users = {'张三', '李四', '王五'}
blacklist = {'王五', '赵六'}
# 检查用户状态
def check_user(username):
    if username in blacklist:
        return f"{username} 在黑名单中"
    elif username in vip_users:
        return f"{username} 是VIP会员"
    else:
        return f"{username} 是普通用户"
# 测试
print(check_user('张三'))  # 张三 是VIP会员
print(check_user('王五'))  # 王五 在黑名单中
# 新会员注册
new_users = {'赵六', '小明', '小红'}
vip_users = vip_users | (new_users - blacklist)  # 排除黑名单用户
print(f"更新后的VIP用户: {vip_users}")

案例3:权限管理

# 用户权限管理
class PermissionManager:
    def __init__(self):
        self.admin_roles = {'admin', 'super_admin'}
        self.user_permissions = {}
    def add_user_permission(self, user, *permissions):
        if user not in self.user_permissions:
            self.user_permissions[user] = set()
        self.user_permissions[user].update(permissions)
    def check_permission(self, user, required_permission):
        if user not in self.user_permissions:
            return False
        # 管理员拥有所有权限
        if 'admin' in self.user_permissions[user]:
            return True
        return required_permission in self.user_permissions[user]
    def common_permissions(self, *users):
        """获取多个用户的共同权限"""
        if not users:
            return set()
        permissions_sets = []
        for user in users:
            if user in self.user_permissions:
                permissions_sets.append(self.user_permissions[user])
        if not permissions_sets:
            return set()
        # 所有用户都拥有的权限(交集)
        return set.intersection(*permissions_sets)
# 使用示例
pm = PermissionManager()
pm.add_user_permission('张三', 'read', 'write', 'execute')
pm.add_user_permission('李四', 'read', 'write')
pm.add_user_permission('王五', 'admin')
print(pm.check_permission('张三', 'execute'))  # True
print(pm.check_permission('李四', 'execute'))  # False
print(pm.check_permission('王五', 'delete'))   # True (管理员)
print(f"共同权限: {pm.common_permissions('张三', '李四')}")  # {'read', 'write'}

常用方法速查

s = {1, 2, 3, 4, 5}
# 常用方法
s.add(6)              # 添加元素
s.remove(3)           # 删除元素(不存在会抛异常)
s.discard(10)         # 安全删除(不存在不抛异常)
s.pop()               # 随机删除并返回
s.clear()             # 清空集合
s.copy()              # 复制集合
# 判断
len(s)                # 集合大小
3 in s                # 成员检查(快速)
# 集合运算返回新集合
s1 & s2               # 交集
s1 | s2               # 并集
s1 - s2               # 差集
s1 ^ s2               # 对称差集
# 集合关系判断
s1.issubset(s2)       # s1是否是s2的子集
s1.issuperset(s2)     # s1是否是s2的超集
s1.isdisjoint(s2)     # s1和s2是否没有交集
# 修改当前集合
s1.intersection_update(s2)    # 修改s1为s1∩s2
s1.difference_update(s2)      # 修改s1为s1-s2
s1.symmetric_difference_update(s2)  # 修改s1为s1^s2

注意事项

# 1. 集合中的元素必须是不可变类型
# 正确
valid_set = {1, 'hello', (1, 2, 3)}
# 错误
# invalid_set = {[1, 2, 3]}  # 列表不能作为集合元素
# 2. 集合运算性能优势
import time
# 使用列表查找
list_data = list(range(1000000))
start = time.time()
999999 in list_data  # 耗时较慢
print(f"列表查找耗时: {time.time() - start}")
# 使用集合查找
set_data = set(range(1000000))
start = time.time()
999999 in set_data  # 速度快得多
print(f"集合查找耗时: {time.time() - start}")
# 3. 集合推导式
squares = {x**2 for x in range(10)}
print(squares)  # {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

集合最常用的场景是:去重快速成员检查集合运算,在实际开发中,根据需求选择合适的数据结构能显著提升代码效率。

抱歉,评论功能暂时关闭!