集合-Python进阶篇十四
一、集合的特点:
1、没有重复、无序的。而list是允许重复和有序(index)的。
2、符号:{},{元素,元素,元素....} 集合
{},{key:value,....} 字典
set1 = {'shangsan'}
print(type(set1)) # <class 'set'>
因为集合是没有重复的,带重复元素的列表可以通过转换成集合来去除重复:
list1 = {5, 6, 2, 7, 4, 2, 2, 9, 7}
set1 = set(list1) # 转换成集合
print(set1) # {2, 4, 5, 6, 7, 9}
二、声明空集合和添加内容
添加 合并
add update set(集合)
append extend list(列表)
# 为了和字典进行区别,设定空集合用set()
set1 = set()
set2 = set()
# 向集合中添加内容
set1.add('三体')
set1.add('盗墓笔记')
print(set1) # {'三体', '盗墓笔记'}
set2.add('西游记')
set2.add('红楼梦')
print(set2) # {'红楼梦', '西游记'}
# 合并集合
set1.update(set2)
print(set1) # {'西游记', '盗墓笔记', '三体', '红楼梦'}
实例:
'''
1、生成4各数字的随机数
2、要有数字和字母
3、5组随机数各部相同
'''
import random
code_set = set()
s = '123456789asdfghjklqwertyuiopzxcvbnm'
while True:
code = ''
for i in range(4):
# 通过下标方式获取随机数
# index = random.randint(0, len(s) - 1)
# code += s[index]
# 不通过下标获取随机数
r = random.choice(s)
code += r
code_set.add(code) # 集合可以不用重复
if len(code_set) == 5: # 有5组数据后跳出循环
break
print(code_set) # {'55ri', 'u8bk', '5taa', '9qiu', 'm9ju'}
三、删除集合元素。
s = {1, 2, 3, 4, 5}
s.remove(1) # 对元素进行指定删除
print(s) # {2, 3, 4, 5}
# remove和discard都可以对指定的元素进行删除,但是当指定元素不存在的时候remove会报错,
# 但是discard不会报错什么都不会做
s.discard(2)
print(s) # {3, 4, 5}
s.clear() # 清空列表
print(s) # set()
s.pop() # 随机删除一个元素
print(s)
四、交集、并集、差集。
1、交集:两个集合相同的部分。intersection(),用符合标识是 &
2、并集:两个集合并在一起。union(),用符合标识是 |
3、差集:与另一个集合不一样的部分。difference(),用符合标识是 -
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8, 9}
result = s1.intersection(s2) # 交集
print(result) # {4, 5}
result = s1.union(s2) # 并集
print(result) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
result = s1.difference(s2) # 差集,s1对s2的
print(result) # {1, 2, 3}
result = s2.difference(s1) # 差集,s2对s1的
print(result) # {8, 9, 6, 7}
通过符号:
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8, 9}
result = s1 & s2
print(result) # {4, 5}
result = s1 | s2 # 并集
print(result) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
result = s1 - s2 # 差集,s1对s2的
print(result) # {1, 2, 3}
result = s2 - s1 # 差集,s2对s1的
print(result) # {8, 9, 6, 7}