数据类型 -- Set(集合)

集合(set)是一个无序、不重复的元素序列。
集合(set)是可变数据类型

创建集合

使用 集合变量 = {value01,value02,...}集合变量 = set(value)

>>> s1 = { 1, 2, 3 }
>>> s1
{1, 2, 3}

>>> s2 = set( [1, 2, 3] )
>>> s2
{1, 2, 3}

第2个例子中,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。

  • 创建空集
>>> s = set()
或
>>> s = { () }

直接使用 s = { } 会创建一个空字典

  • 重复元素在set中会被自动过滤
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
  • 两个集合可以完成数学意义上的交集、并集、差集等操作。
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 差集,a 中包含而 b 中不包含的元素
{'r', 'd', 'b'}
>>> a | b                              # 并集,a 或 b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 交集,a 和 b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # a 和 b 中不同时存在的元素
{'r', 'd', 'b', 'm', 'z', 'l'}
  • 集合是可变数据类型,但其元素不能是可变数据类型
>>> s = {[1,2,3], [11,22,33]}
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'list'
  • set 的原理和 dict 一样,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
  • 注意区别:“将 list 转换为集合 ” 和 “ 将 list 做为元素放入集合 ”
>>> s1 = set( [1,2,3,4,5] )   # 使用 set() 函数,将 list 转为 集合
>>> s1
{1, 2, 3, 4, 5}
>>> type(s1)


>>> s2 = { [1,2,3,4,5] }     # 将 list 做为元素放入集合
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'list'
集合方法
  • add(key) 方法可以添加元素到set中,可以重复添加,但不会有效果。
>>> thisset = set(("Google", "Neuedu", "Taobao"))
>>> thisset.add("Facebook")
>>> thisset
{'Taobao', 'Facebook', 'Google', 'Neuedu'}

>>> thisset.add("Facebook")
>>> thisset.add("Facebook")
>>> thisset
{'Taobao', 'Facebook', 'Google', 'Neuedu'}
  • update(set) 方法将另一个集合中的元素添加到当前集合中。
x = {"apple", "banana", "cherry"}
y = {"google", "neuedu", "apple"} 
x.update(y)  
print(x)

{'banana', 'apple', 'google', 'neuedu', 'cherry'}

注意: s1.add( (1,2,3) ) 是把元组 (1,2,3) 作为元素添加到集合中,得到的结果是 {1, 2, 3, (1, 2, 3)}

  • remove(key)方法可以删除元素,不返回被删元素,如果元素不存在会报错。
>>> thisset = set(("Google", "Neuedu", "Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Google', 'Neuedu'}
>>> thisset.remove("Facebook")   # 不存在会发生错误
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'Facebook'

discard(obj),删除元素,不返回被删元素,元素不存在时不报错
remove(obj),删除元素,不返回被删元素,元素不存在时报错
pop(),随机删除元素,返回被删元素,集合为空时报错

  • x in s 判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
>>> thisset = set( ("Google", "Neuedu", "Taobao") )
>>> "Neuedu" in thisset
True
>>> "Facebook" in thisset
False
  • copy() 方法用于拷贝一个集合。
fruits = {"apple", "banana", "cherry"}
x = fruits.copy()
print(x)

{'cherry', 'banana', 'apple'}
集合函数
  • len(set)函数,用来获得集合元素个数
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> len(thisset)
3




- end -

你可能感兴趣的:(数据类型 -- Set(集合))