python学习之路☞15.数据结构 set
#python, #data_structure, #set, #union, #intersection, #difference, #dedup,
set 代码练习
'''
集合:
由花括号内的的元素无序且不重复,并用逗号分隔的一种数据结构
常用于去重和关系运算。
元素:任意类型
特点:
无序:
集合中的元素没有特定的顺序。
唯一:
集合中的每个元素都是唯一的,没有重复。
创建:
非空集合:
使用 {} 括号创建一个包含元素的集合。
空集合:
使用 set() 内置函数创建一个空集合。
```python
# 创建空集合
empty_set = set()
# 创建非空集合
fruits = {"apple", "banana", "cherry"}
```
基本操作
增:
使用 add() 方法向集合添加单个元素。
删:
使用 remove() 方法删除指定元素,元素不存在时引发 KeyError 。
使用 discard() 方法删除指定元素,元素不存在时不引发错误 。
使用 pop() 方法随机删除并返回一个元素。
检查元素:
使用 in 运算符检查元素是否在集合中。
集合长度:
使用 len() 函数获取集合中元素的个数。
```python
# 创建集合
fruits = {"apple", "banana", "cherry"}
# 添加元素
fruits.add("orange")
print(fruits) # 输出:{'orange', 'banana', 'apple', 'cherry'}
# 删除元素
fruits.remove("banana")
print(fruits) # 输出:{'orange', 'apple', 'cherry'}
# 检查元素
print("apple" in fruits) # 输出:True
# 集合长度
print(len(fruits)) # 输出:3
```
集合的常用方法
add(item):
向集合中添加一个元素。
remove(item):
从集合中移除一个元素,如果元素不存在会引发 KeyError 。
discard(item):
从集合中移除一个元素,如果元素不存在不会引发错误。
pop():
随机移除并返回一个元素。
clear():
清空集合中的所有元素。
copy():
返回集合的浅复制。
浅复制是指创建一个新的集合对象,其中包含与原始集合相同的元素,
但是新集合和原集合是独立的,即它们在内存中有不同的地址。
这种性质和列表的切片很像
```python
fruits = {"apple", "banana", "cherry"}
# add
fruits.add("orange")
print(fruits) # 输出:{'orange', 'banana', 'apple', 'cherry'}
# discard
fruits.discard("banana")
print(fruits) # 输出:{'orange', 'apple', 'cherry'}
# pop
removed_item = fruits.pop()
print(removed_item) # 输出:随机移除的元素
print(fruits) # 输出:剩余元素
# clear
fruits.clear()
print(fruits) # 输出:set()
```
实例应用
集合运算
并集:
使用 union() 方法或 | 运算符获取两个集合的并集。
交集:
使用 intersection() 方法或 & 运算符获取两个集合的交集。
差集:
使用 difference() 方法或 - 运算符获取两个集合的差集。
对称差集:
使用 symmetric_difference() 方法或 ^ 运算符获取两个集合的对称差集。
```python
set1 = {"apple", "banana", "cherry"}
set2 = {"banana", "cherry", "date"}
# 并集
union_set = set1.union(set2)
print(union_set) # 输出:{'banana', 'apple', 'cherry', 'date'}
# 交集
intersection_set = set1.intersection(set2)
print(intersection_set) # 输出:{'banana', 'cherry'}
# 差集
difference_set = set1.difference(set2)
print(difference_set) # 输出:{'apple'}
# 对称差集
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # 输出:{'apple', 'date'}
```
去重:集合可以用于从列表中去除重复项。
```python
items = ["apple", "banana", "apple", "cherry", "banana"]
unique_items = list(set(items))
print(unique_items) # 输出:['apple', 'banana', 'cherry']
```
集合推导式:集合推导式提供了一种简洁的语法来创建集合。
```python
# 生成包含从0到9的平方数的集合
squares = {x ** 2 for x in range(10)}
print(squares) # 输出:{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
```
'''
# 创建集合
print('---------创建集合-----------')
make_set = set() # set() 内置函数创建 集合
print(make_set, type(make_set))
"""
这里会发现,True不会被打印出来
在 Python 中,布尔类型的 True 和整数 1 被认为是相等的。
在集合中,由于元素的唯一性,当添加 1 后,再添加 True 时,集合会忽略 True
"""
make_set = {1, 1.9, True, '你好世界'} # {elements} 创建
print(make_set, type(make_set))
# 操作 set 集合
# 增
print('---------增加元素-----------')
make_set.add('你好')
make_set.add(1.99)
make_set.add(False)
make_set.add(2)
print(make_set, type(make_set))
# 删
print('---------删除元素-----------')
make_set.remove(1)
print(make_set, type(make_set))
make_set.discard('你好世界')
print(make_set, type(make_set))
print('删除', make_set.pop(), '元素,', make_set, type(make_set))
# 检查元素
print('---------检查元素-----------')
print(' 你好世界 在集合里吗?', '你好世界' in make_set)
# 获取长度
print('---------获取长度-----------')
print('长度:', len(make_set))
# 复制集合
print('---------复制集合-----------')
copy_set = make_set.copy()
print(copy_set, type(copy_set))
# 清空集合
print('---------清空集合-----------')
make_set.clear()
print(make_set, type(make_set))
# 集合运算
print('---------集合运算 并-----------')
make_set_0 = {1, 2, 3, 5, 7, 9}
make_set_1 = {1, 2, 4, 6, 8, 10}
print('集合0:', make_set_0)
print('集合1:', make_set_1)
print('并集运算结果:', make_set_0.union(make_set_1))
print('---------集合运算 交-----------')
print('交集运算结果:', make_set_0.intersection(make_set_1))
"""
这里就能看出来,差集运算是第一个集合与第二个集合比较
将第一个集合种不同的元素拿出来
"""
print('---------集合运算 差-----------')
print('差集运算结果集合0种的不同元素:', make_set_0.difference(make_set_1))
print('差集运算结果集合1种的不同元素:', make_set_1.difference(make_set_0))
"""
这里就能看出来,对称差集运算是第一个集合与第二个集合比较
将两个集合中共有的部分剔除然后合并
"""
print('---------集合运算 对称差-----------')
print('对称差集运算结果:', make_set_0.symmetric_difference(make_set_1))
# 列表去重
"""
利用set元素唯一的特性可以为列表这种带有索引有序的元素去重
"""
make_list = [1, 2, 1, 3, 4, 5, 6]
print(make_list, '去重结果:', list(set(make_list))) # 列表转化为集合再将集合转化为列表
# 集合推导式创建 0x3~4x3
"""
i * 3 for i in range(5)
这个推导式的过程可以看作是以下的结构
for i in range(5):
i*3
"""
result_set = {i * 3 for i in range(5)}
print(result_set)
Comments
Post a Comment