数据类型 -- Set(集合)
2019-01-04 本文已影响0人
__深蓝__
集合(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 "<stdin>", line 1, in <module>
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)
<class 'set'>
>>> s2 = { [1,2,3,4,5] } # 将 list 做为元素放入集合
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
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 -