集合的特点:
1.没有重复的元素,且元素无序存放(故集合没有下标和切片)
2.使用时为 { } 与字典区分:当花括号里的元素不是键值对的时候为集合
3.集合的底层其实是通过字典来封装的
集合的简单使用:
定义一个空集合
set1 = set()
print(type(set1), len(set1))
输出
<class 'set'> 0
添加操作
add 用于加入元素
update 用于集合的合并
由于集合的无序性,在合并集合后,并不是按照拼接的顺序输出。
set1 = set()
set1.add('武动乾坤')
set2 = {'jsy', '稻香', '爱的代价', '大碗宽面'}
set2.update(set1)
print(set2)
输出结果不唯一,每次输出可能有新的顺序。
{'稻香', '大碗宽面', '武动乾坤', 'jsy', '爱的代价'}
移除操作
remove 当移除一个集合里没有的元素时,报错
discard 当移除一个集合里没有的元素时,不会报错
del 仅可对集合本身使用,不可用于元素,因为元素在集合里为混乱排放,无下标
clear 清空集合,留下空集合
pop 随机删除集合里的一个元素
交 并 差集操作
交集 intersection
并集 union
差集 difference
举以下例子:
set2 = {1, 2, 3, 4, 5}
set3 = {3, 4, 5, 6, 7, 8, 9}
result = set2.intersection(set3)
print(result)
result = set2.union(set3)
print(result)
result = set2.difference(set3) #结果为 set2 与 set3不同的部分,以set2为主体
print(result)
输出:
{3, 4, 5}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2}
可用运算符表示交集,并集,差集
交集 &
并集 |
差集 -
set2 = {1, 2, 3, 4, 5}
set3 = {3, 4, 5, 6, 7, 8, 9}
print(set2 & set3) # 交集符号 &
print(set2 | set3) # 并集符号 |
print(set2 - set3) # 差集符号 -
输出:
{3, 4, 5}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2}
列表,元组,字典,集合 大总结:
list: 允许重复,有序,有下标,可切片
tuple: 允许重复,里面元素不能进行增删改,只能查看
dict: 字典里的元素以键值对的形式存在 键:唯一性 值:可以重复
set: 元素不允许重复,且具有无序性
它们之间的类型转换:
list----->tuple,set(列表转集合时,注意不能有重复元素,否则长度改变)
tuple----->list,set
set----->list,tuple (列表,元组,集合,此三者均可相互转)
当字典参与的转换时,需特殊对待
dict----->list,tuple (仅能将字典的键转换,不能将值转换)
list----->dict (当出现以下情况,可转)
列表内必须是 列表或是元组,且其中只有两个元素时:
list = [['a', {1}], ('', 2), ('c', 3)]
print(dict(list))
输出:
{'a': {1}, '': 2, 'c': 3}
集合和列表方法上的区别:
正是由于集合的无序性,没有下标,故在方法上与列表有些差异。
append(添加元素) extend(实现列表的拼接) insert(在某一下标插入元素) ----->list
add(添加元素) update(两个集合的合并) ---->set
关于集合的实例:
*产生5组(不重复),字母和数字组成的4位验证码
1.使用random.choice() 随机选择出字符串中的一个字符
2.也可通过随机获取字符串内字符的下标,进行赋值
import random
m = 'asdfghjklqwertyuiopzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789'
set5 = set()
while True:
s = ''
for i in range(4):
ran = random.choice(m) # 用choice随机选择验证码
s += ran
# index = random.randint(0,len(m)-1)
# s += m[index]
set5.add(s)
if len(set5) == 5:
break
print(set5)
输出不唯一
{'HINS', 'i71y', 'CU1i', 'Rcbx', 'XBeX'}