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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-01-03 22:40  舒畅123  阅读(102)  评论(0编辑  收藏  举报