Python基础学习(五):集合

1. 集合与固定集合简介

1.1 集合(set

特点:

  • 集合是一个可变的容器,用于存储唯一的、不可变的元素。

  • 集合中的元素是无序的。

  • 集合的元素必须是不可变类型(如整数、字符串、元组),不能存储列表、字典等可变类型。

1.2 固定集合(frozenset

  • 固定集合是一个不可变的集合,一旦创建,不能修改。

  • 固定集合的元素也必须是不可变类型。


2. 集合与固定集合创建

2.1 创建集合

# 创建空集合
s1 = set()

# 创建非空集合
s2 = {1, 2, 3, 4}

# 从可迭代对象创建集合
s3 = set(range(5))  # {0, 1, 2, 3, 4}
s4 = set("ABC")     # {'A', 'B', 'C'}
s5 = set([1, 2, 3]) # {1, 2, 3}

2.2 创建固定集合

# 创建空固定集合
fs1 = frozenset()

# 创建非空固定集合
fs2 = frozenset([1, 2, 3])  # frozenset({1, 2, 3})
fs3 = frozenset("ABC")      # frozenset({'A', 'B', 'C'})

3. 集合操作

3.1 添加元素

s = {1, 2, 3}

# 添加单个元素
s.add(4)
print(s)  # 输出:{1, 2, 3, 4}

# 添加多个元素
s.update([5, 6])
print(s)  # 输出:{1, 2, 3, 4, 5, 6}

3.2 删除元素

s = {1, 2, 3, 4, 5}

# 删除指定元素
s.remove(3)
print(s)  # 输出:{1, 2, 4, 5}

# 删除指定元素(如果存在)
s.discard(2)
print(s)  # 输出:{1, 4, 5}

# 随机删除一个元素
s.pop()
print(s)  # 输出:{4, 5}

# 清空集合
s.clear()
print(s)  # 输出:set()

3.3 访问与修改

集合是无序的,不能通过索引访问元素。如果需要访问元素,可以通过遍历或转换为列表。

遍历集合
s = {1, 2, 3}
for item in s:
    print(item)
转换为列表
s = {1, 2, 3}
lst = list(s)
print(lst)  # 输出:[1, 2, 3]

3.4 判断元素是否存在

s = {1, 2, 3}
print(2 in s)  # 输出:True
print(4 in s)  # 输出:False

4. 集合常用 API

4.1 常用方法

方法描述
s.add(x)添加元素 x 到集合 s。
s.update(x)添加多个元素到集合 s。
s.remove(x)删除集合 s 中的元素 x,如果 x 不存在则报错。
s.discard(x)删除集合 s 中的元素 x,如果 x 不存在则不报错。
s.pop()随机删除并返回集合 s 中的一个元素。
s.clear()清空集合 s。
s.copy()返回集合 s 的浅拷贝。
s.union(t)返回集合 s 和 t 的并集。
s.intersection(t)返回集合 s 和 t 的交集。
s.difference(t)返回集合 s 和 t 的差集(s 中有但 t 中没有的元素)。
s.symmetric_difference(t)返回集合 s 和 t 的对称差集(s 和 t 中不重复的元素)。
s.issubset(t)判断集合 s 是否是 t 的子集。
s.issuperset(t)判断集合 s 是否是 t 的超集。
s.isdisjoint(t)判断集合 s 和 t 是否没有交集。
s = {1, 2, 3}
s.update([4, 5, 6])
print(s)  # 输出:{1, 2, 3, 4, 5, 6}

s = {1, 2, 3}
t = {3, 4, 5}
result = s.union(t)
print(result)  # 输出:{1, 2, 3, 4, 5}

result = s.intersection(t)
print(result)  # 输出:{3}

result = s.symmetric_difference(t)
print(result)  # 输出:{1, 2, 4, 5}


5. 集合的坑与小技巧

5.1 集合的元素必须是不可变类型

集合的元素必须是不可变类型(如整数、字符串、元组),不能存储列表、字典等可变类型。

错误示例:
s = {[1, 2], [3, 4]}  # 报错:TypeError: unhashable type: 'list'
正确示例:
s = {(1, 2), (3, 4)}  # 使用元组作为元素

5.2 集合的无序性

集合中的元素是无序的,因此不能通过索引访问元素。

s = {1, 2, 3}
print(s[0])  # 报错:TypeError: 'set' object is not subscriptable

5.3 使用集合去重

集合的一个常见用途是去除列表中的重复元素。

lst = [1, 2, 2, 3, 4, 4, 5]
unique_lst = list(set(lst))
print(unique_lst)  # 输出:[1, 2, 3, 4, 5]

5.4 固定集合的不可变性

固定集合是不可变的,因此不能添加或删除元素。

fs = frozenset([1, 2, 3])
fs.add(4)  # 报错:AttributeError: 'frozenset' object has no attribute 'add'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值