本文目录导读:

我来详细介绍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}
集合最常用的场景是:去重、快速成员检查、集合运算,在实际开发中,根据需求选择合适的数据结构能显著提升代码效率。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播