这里是清安,前面学了list列表,tuple元组,dict字典,本章我们就来学习一下set集合。
简洁
集合 set 是装有独特值的无序“袋子”。一个简单的集合可以包含任何数据类型的值。如果有两个集合,则可以执行像联合、交 集以及集合求差等标准集合运算。
那么具体什么是集合?
a_ = {1}
print(a)
print(type(a_))
打印后你能看到<class 'set'>,这就是集合,要创建只包含一个值的集合,仅需将该值放置于花括号之间。
a_ = {1, 2}
print(a_)
要创建多值集合,请将值用逗号分开,并用花括号将所有值 包裹起来。
列表为基础的集合
这个其实就是列表转集合的一种方式。
list_ = ['a', 'b', 'c']
print(set(list_))
转换了之后list_是不是就是集合了呢,并不是。它还是列表。它是初始变量,初始值 就是列表,我们并没有改变初始值。只是输出转化。
空集合
a_ = set()
print(a_)
空集合就直接不给值就好了,与其说值不如直接说成员更合适一些。
修改集合
添加值
add()
list_ = {'a', 'b', 'c'}
list_.add('qingan')
list_1 = {1, 2, 3}
list_1.add(4)
print(list_)
print(list_1)
这里我举例了两个例子,字符串形式的,一个是整数类型的。为什么要举两个例子。
字符串形式的,如果像上述这么写,print出来是无序的。前面说过了。随机排布,所以这里add后,值也是随机出现在四个字符串其中的某一个位置,每一次print位置可能不一样。但是如果是整数,就会按照原来的形式输出。并将add的值写在后面。
update()
list_ = {'a', 'b', 'c'}
list_.update({1, 2, 3})
print(list_)
list_.update({'qingan'}, {'wubieshi'})
print(list_)
list_.update([1, 2, 'qingan'])
print(list_)
这里重点来了,我写了三种添加值的形式,这里不是叫你看无序了。看的是update()方法。
{'c', 1, 2, 3, 'a', 'b'}
{'c', 1, 2, 3, 'a', 'wubieshi', 'qingan', 'b'}
{'c', 1, 2, 3, 'a', 'wubieshi', 'qingan', 'b'}
结果是这样的,不管是多个集合还是一个集合,还是列表。update() 方法仅接受一个集合作为参数,并将其所有成员添 加到初始列表中。其行为方式就像是对参数集合中的每个成员调用 add() 方法。 update() 方法还可接受一些其它数据类型的对象作为参数, 包括列表。如果调用时传入列表,update() 将会把列表中所有的元素添加到初始集合中。
注意:这里还是有去重的。并不只是会添加值进去。
删除值
有三种方法,有两种前面也是有所接触的。具体看看:
discard()
# 1
list_ = {1, 3, 5, 7, 9, 11}
list_.discard(7)
print(list_)
discard() 接受一个单值作为参数,并从集合中删除该值。但是如果你删除一个不存在的值,它是不会报错的,例如list_discard(6)。
remove()
# 2
list_ = {1, 3, 5, 7, 9, 11}
list_.remove(7)
print(list_)
remove() 方法也接受一个单值作为参数,也从集合中将其删除。 如果删除一个不存在的值它会抛出异常,告诉你错误,例如list_remove(6)。
Traceback (most recent call last):
File "F:\selenium_demo\shopX_demo\index\book.py", line 12, in <module>
list_.remove(6)
KeyError: 6
pop()
list_ = {'1', '3', '5', 7, '9', 11}
list_.pop()
print(list_)
pop() 方法从集合中删除某个值,并返回该值。然而,由于 集合是无序的,并没有 “ 最后一个 ” 值的概念,因此无法控制删 除的是哪一个值。它基本上是随机的。这也是这里为什么不用整数做演示的原因,别弄混了。此方法自己多运行看结果。
clear()
list_ = {'1', '3', '5', 7, '9', 11}
list_.clear()
print(list_)
clear() 方法删除集合中 所有 的值,留下一个空集合。它等价于 a_set = set(),该语句创建一个新的空集合,并用之覆盖a_set 变量的之前的值。
如果你clear()后还运行了pop(),亦或者其他的方法就会抛出异常哦。
常见集合操作
是否存在集合中
list_ = {1, 3, 5, 7, 9, 11}
i = 7 in list_
print(i)
这个用法还是很常见得,用于判断7是否存在于list_集合中。返回TRUE OR FALSE
union()并集
list_ = {1, 3, 5, 7, 9, 11}
list_1 = {2, 4, 6, 8, 10, 12}
o = list_.union(list_1)
print(o)
将两集合整理成一个新的集合,去重!
intersection()交集
list_ = {1, 3, 5, 7, 9, 11}
list_1 = {1, 2, 4, 6, 8, 10, 12}
i = list_.intersection(list_1)
print(i)
intersection() 方法返回一个新集合,其中装着 "同时" 在两个集合中出现的所有元素。
difference()求差
list_ = {1, 3, 5, 7, 9, 11}
list_1 = {1, 3, 4, 6, 8, 10, 12}
i = list_.difference(list_1)
print(i)
difference() 方法返回的新集合中,输出list_中有list_1中没有的值。
symmetric_difference()
list_ = {1, 3, 5, 7, 9, 11}
list_1 = {1, 3, 4, 6, 8, 10, 12}
i = list_.symmetric_difference(list_1)
print(i)
symmetric_difference() 方法返回一个新集合,其中装着所有只在其中一个 集合中出现的元素。也就有点类似于,把两个集合中重复的值去掉了。