Python 集合
读书之法,在循序而渐进,熟读而精思。——朱熹
集合的概念
无序
不能重复
集合中各元素间是无序的,相同元素在集合中唯一存在.即集合是无序组合,它没有索引和位置的概念,但可变集合中的元素是可以动态添加或者删除的
集合的类型
可变集合 set
不可变集合 frozenset
set()函数
可以将其他的组合数据类型转变成可变集合类型(或将不可变的集合类型 frozenset 转变为可变的集合类型 set),返回一个无重复元素且排序任意的可变集合
语法
set
这里注意不能直接使用{}因为{}生成的是字典,而不是集合类型
set()
实例化
s1 = set() # 创建一个空的集合
result1 = [1.23,'a'] #列表
result2 = {'name':'a','sex':'男'} # 字典类型
result3 = (1,2,'b') # 元祖类型
result4 = "厉害了,我的国" # 字符串
s2 = set(result1)
s3 = set(result2)
s4 = set(result3)
s5 = set(result4)
print(s1)
print(s2)
print(s3)
print(s4)
print(s5)
- 运行的结果
对象的话 它只会保存属性
set()
{1.23, 'a'}
{'name', 'sex'}
{1, 2, 'b'}
{'国', ',', '我', '的', '了', '厉', '害'}
不可变集合 frozenset()里面的元素不可变
c1 = frozenset() # 一个空的不可变集合,该集合不能加任何元素
c2 = frozenset("1,2,3") # 该集合只能这三个元素不能改变
print(type(c1))
print(c2)
# 结果
# <class 'frozenset'>
# frozenset({'2', '3', ',', '1'})
集合函数
add()函数
如果集合中不存在元素 X,就将元素 x 添加到集合中去
语法
s.add(x)
实例化
s= {1,2,'a'}
s.add("ab") # 将ab添加到集合中
s.add(1) # 将1 添加到集合中
s.add('z') #将z添加到集合中
print(s)
- 结果
{1, 2, 'z', 'a', 'ab'}
clear 函数
删除集合 s 中所有的元素
s= {1,2,3,'a','b'}
s.clear()
print(s)
- 结果
set()
copy()函数
复制一个新的集合
s.copy()
result1 = {1, 2, 3, 'a', 'b'}
result2 = result1.copy()
result2.add('d')
print(result2)
print(result1)
- 结果
{'b', 1, 2, 3, 'd', 'a'}
{1, 2, 3, 'a', 'b'}
discard() 函数
移除集合中指定的 value 元素,若 value 存在,则移除,不存在也不报错
result1 = {1, 2, 3, 'a', 'b'}
result1.discard('a')
result1.discard('e')
print(result1)
- 结果
{1, 2, 3, 'b'}
remove() 函数
移除集合中指定的 value 元素,若 value 存在,则移除,不存在则报错
result1 = {1, 2, 3, 'a', 'b'}
result1.discard('a')
result1.discard('e')
print(result1)
# 结果报错
pop 函数
移除集合中一个随机元素,若集合为空则报错
result1 = {1, 2, 3, 'a', 'b'}
result1.pop()
print(result1)
# 结果
# {1,3,'a','b'}
len 函数
计算集合的个数
str1 = set('abccddadada')
length = len(str1)
print(length)
# 结果
# 4
in 判断是否在里面
str = set('abccddadada')
result = 'a' in str
print(result)
- 结果
True
两个集合之间的操作
- 取差集 (a 包含而 b 不包含)
str1 = set('abccddadada')
str2 = set('bbbcde')
result = str1-str2
print(result)
# 结果
# {'a'}
- 取并集 a | b
str1 = set('abccddadada')
str2 = set('bbbcde')
result = str1 | str2
print(result)
# 结果
# {'a','b','c','d','e'}
- 取交集 a&b
str1 = set('abccddadada')
str2 = set('bbbcde')
result = str1 & str2
print(result)
# 结果
# {'c','b','d'}
- 不同时包含 a 和 b 的元素(b 中 a 没有的元素,a 中 b 没有的元素)
str1 = set('abccddadada')
str2 = set('bbbcde')
result = str1 ^ str2
print(result)
# 结果
# {'e','a'}