容器类型集合的基本操作

2019-01-03  本文已影响0人  无尽的结

一、容器类型集合是一个不重复元素的无序组合,下面讲讲如何创建一个集合、访问集合的元素、集合的运算、什么时候用集合。

1.创建一个集合:{}或者set()
{} #创建一个空集合
set()#创建一个空集合
{1,2,3} #创建一个有元素的集合里面的元素是无序排列
set('apns')#创建一个有元素的集合里面的元素是无序排列
print({})
print(set())
print({1,2,3})
print(set('apns'))

输出

{}
set()
{1, 2, 3}
{'p', 'n', 'a', 's'}
2.增长或缩减以及清空集合的操作如下图:
aset = set("aabbcc")#创建一个集合并赋值给aset,集合会把"aabbcc"这个字符串拆分成单个字符来作为集合的元素,而且集合还会给重复的元素去掉
print(aset)
aset.add(1.23) #给aset变量中存储的集合中添加一个1.23数值元素
print(aset)
aset.update({'d',6,8.8}) #用update可以给集合中批量添加元素
print(aset)
aset.remove("b") #给aset变量中存储的集合中指定的元素“b”缩减掉,如果remove空括号里面参数在这个集合当中不存在则会报错,如果用discard()里面参数在集合中不存在则不会报错
print(aset)
aset.pop() #缩减aset变量中存储的集合中的任意元素
print(aset)
aset.clear() #清空aset变量中存储的集合中的所有元素
print(aset)

输出

{'a', 'c', 'b'}
{1.23, 'a', 'c', 'b'}
{1.23, 'b', 6, 8.8, 'd', 'a', 'c'}
{1.23, 6, 8.8, 'd', 'a', 'c'}
{6, 8.8, 'd', 'a', 'c'}
set()
2.1用add和update往里面添加元素时需要注意它所带的数据对象一定要是一个 不可变数据类型,比如说你在add后面添加一个列表就会出错如下图所示:
图1
aset = set("aabbcc")#创建一个集合并赋值给aset
print(aset)
aset.add([1]) #给aset变量中存储的集合中添加一个列表
print(aset)

输出

{'b', 'c', 'a'}
Traceback (most recent call last):
  File "F:/k/demo5.py", line 3, in <module>
    aset.add([1]) #给aset变量中存储的集合中添加一个1.23数值元素
TypeError: unhashable type: 'list'
2.2在update后面添加一个列表则会将列表里面的元素添加到集合中
图2
aset = set("aabbcc")#创建一个集合并赋值给aset
print(aset)
aset.update([1,2,3]) #用update可以给集合中添加一个列表,可以将列表的元素全部添加到集合中,且不可添加可迭代数据对象
print(aset)
aset.update(5) #错误,update更新集合时传入的是一个可迭代对象
print(aset)

输出

Traceback (most recent call last):
{'b', 'a', 'c'}
  File "F:/k/demo5.py", line 5, in <module>
{1, 2, 3, 'b', 'a', 'c'}
    aset.update(5) #错误,update更新集合时传入的是一个可迭代对象
TypeError: 'int' object is not iterable
3.用len函数求集合元素的个数或者说大小如下图所示
aset = set("aabbcc")#创建一个集合并赋值给aset
print(len(aset)) #用len函数求集合元素的个数,因为集合会把一个字符串拆分成单个的字符元素并且去重所以打印结果为3
baset = set("qwertyuijd")
print(len(baset))

输出

3
10
4.访问集合中的元素首先讲一下(in)这个函数,in函数可以判断某个元素是否存在于某个集合中如下图:
baset = set("qwertyui")
print("a" in baset ) #判断a这个字符元素是否存在于baset集合中打印结果为False
print("q" in baset)  #判断q这个字符元素是否存在于baset集合中打印结果为True

输出

False
True
4.1也可以用迭代循环for来访问集合中的元素如下图:
baset = set("qwertyui")
for (a) in baset: #(a)用for循环取遍baset里面的元素
    print('a' in baset)#判断a是否在baset集合中循环一次做一个判断
for q in baset:
    print(q in baset) #跟上面的逻辑一样

输出

False
False
False
False
False
False
False
False
True
True
True
True
True
True
True
True
5.集合的运算
5.1集合的并集,并集的运算符是(|)一根竖线基本操作如下图:
baset = set("abc")
caset = set("bcd")
print(baset|caset) #合并两个集合并去重输出

输出

{'d', 'a', 'b', 'c'}
5.2集合的交集,交集的运算符是(&)基本操作如下图:
baset = set("abc")
caset = set("bcd")
print(baset&caset) #两个集合进行交集运算获取两个集合中有重合的元素得到一个新的集合并输出

输出

{'b', 'c'}
5.3集合的差集,差集的运算符(-)基本操作如下图:
baset = set("abc")
caset = set("bcd")
print(baset-caset) #两个集合进行差集运算并输出,差集就是运算符(-)左边的集合有包含运算符右边集合的元素则都被去掉
#如baset-caset第一个集合中有a,b,c三个运算减掉第二个集合中的b,c元素就只剩下a元素了

输出

{'a'}
5.4集合的对称差,对称差的运算符是(^)基本操作如下图:
baset = set("abc")
caset = set("bcd")
print(baset^caset) #两个集合进行对称差运算,对称差就是将baset-caset和caset-baset并在一起,也就是将两个集合相互进行差集运算然后合并在一起

输出

{'d', 'a'}
6.集合的关系判定,一个集合是否是另一个集合的子集就用<=表示、真子集就用<表示、超子集>=表示、真超子集就用>表示。基本操作如下图所示:
baset = set("abc")
print(baset <= set("abcd")) #判断baset是否是"abcd"的子集并输出结果为True则是,为False则不是
print(baset < set("abcd"))#判断baset是否是"abcd"的真子集并输出结果为True则是,为False则不是
print(baset >= set("abcd"))#判断baset是否是"abcd"的超子集并输出结果为True则是,为False则不是
print(baset > set("abcd"))#判断baset是否是"abcd"的真超子集并输出结果为True则是,为False则不是

输出

True
True
False
False
7.什么时候用集合
7.1在 需要快速去除重复的数据项时可以用到,判断元素是否在一组数据中,如果这些数据的次序不重要,使用集合可以获得比列表更好的性能
上一篇下一篇

猜你喜欢

热点阅读