python_day6(集合)
集合set
集合在后续工作中用的比较少。
集合的特点
1、可变数据类型;
2、集合中的元素必须都是不可变的数据类型;
3、集合中的元素都是无序的
4、集合中的元素不重复,这点很重要,可以用来做去重
set2={1,2,'barry',[1,2,3]}
print(set2)
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py
Traceback (most recent call last):
File "F:/python/python学习/人工智能/第一阶段day2/14.py", line 1, in <module>
set2={1,2,'barry',[1,2,3]}
TypeError: unhashable type: 'list'
Process finished with exit code 1
如上代码所示,集合中含有可变的数据类型列表,所以结果报错
集合的创建方法
方法一
set1=set({1,3})#推荐使用第一种
set2=set([1,3])
print(set1)
print(set2)
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py
{1, 3}
{1, 3}
Process finished with exit code 0
如上代码所示,都是圆括号中嵌套一个方括号和大括号都行,但是一般推荐使用小括号里面嵌套大括号。
其次是,集合和字典很类似,都是使用大括号包括起来,但是与字典相比,集合中没有键值对
方法二
set2={1,2,'barry'}
print(set2)
集合的方法
与其他数据类型类似,集合也有增、删、查三种方法,但是由于集合中的元素是不可变的,所有集合没有改这个方法
集合的增(add和update两种方法)
set1 = {'alex','wusir','ritian','egon','barry'}
#直接用add
set1.add('girl')
print(set1)
#利用update方法,类似列表中的extend方法,这是迭代增加的
set2 = {'alex','wusir','ritian','egon','barry'}
set2.update('abs')
print(set2)#运行结果可看出增加的结果是无序的
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py
{'ritian', 'alex', 'barry', 'wusir', 'girl', 'egon'}
{'ritian', 'alex', 'barry', 's', 'wusir', 'a', 'b', 'egon'}
Process finished with exit code 0
集合的删
set1 = {'alex','wusir','ritian','egon','barry'}
set1.pop()
print(set1)#也是随机删除,但是pop方法有返回值
按照元素来删除
set1 = {'alex','wusir','ritian','egon','barry'}
set1.remove('alex')
print(set1)#没有返回值
清除集合中的元素
set1 = {'alex','wusir','ritian','egon','barry'}
set1.clear()
print(set1)#没有返回值
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py
set()
Process finished with exit code 0
注意,运行上面的代码后,结果不是{},而是以set()来表示空的集合,这是因为{}一般用来表示空字典,以免混淆
删除这个集合
set1 = {'alex','wusir','ritian','egon','barry'}
del set1
print(set1)#没有返回值
D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py
Traceback (most recent call last):
File "F:/python/python学习/人工智能/第一阶段day2/14.py", line 3, in <module>
print(set1)#没有返回值
NameError: name 'set1' is not defined
Process finished with exit code 1
集合的查
因为集合没有键值对,没有索引,且集合中的元素是无序的,所以集合的查询只能使用for循环
set1 = {'alex','wusir','ritian','egon','barry'}
for i in set1:
print(i)
集合的其他操作
交集
set1={1,2,3,4}
set2={3,4,5,6}
print(set1 & set2)
print(set1.intersection(set2))
并集
set1={1,2,3,4}
set2={3,4,5,6}
print(set1 | set2)
print(set1.union(set2))
反交集(除了共有元素以外都算)
set1={1,2,3,4}
set2={3,4,5,6}
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
差集
set1={1,2,3,4}
set2={3,4,5,6}
print(set1 - set2)#set1中独有,set2中没有
print(set1.difference(set2))
子集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1< set2)
print(set1.issubset(set2))
超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set2>set1)
print(set2.issuperset(set1))
集合和列表之间的转换
可以利用集合中元素不能重合的特点,对列表中重合的元素进行去重
li=[1,1,2,2,4,5,8,8,8,9,5,6,44,2,5] set1=set(li)#将列表转换为集合 print(set1) li2=list(set1)#将集合转换为列表 print(li2) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py {1, 2, 4, 5, 6, 8, 9, 44} [1, 2, 4, 5, 6, 8, 9, 44] Process finished with exit code 0
集合由可变数据类型变为不可变数据类型
s=set('barry') print(s,type(s)) s1=frozenset('barry')#由可变的数据类型,变为不可变的数据类型,可以利用for循环执行查找,但是不能执行增、删等操作 print(s1,type(s1)) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py {'y', 'r', 'b', 'a'} <class 'set'> frozenset({'y', 'r', 'b', 'a'}) <class 'frozenset'> Process finished with exit code 0

浙公网安备 33010602011771号