集合
集合是无序的,不重复的且不可以更改的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
- 去重,把一个列表变成集合,就自动去重了。
- 关系测试,测试两组数据之前的交集、差集、并集等关系。
1.集合的创建
1)创建一个空的集合
这里需要注意,我们不可以直接用花括号"{}"
>>> st = set()
>>> st
set()
>>> st1 = {}
>>> type(st), type(st1)
(<class 'set'>, <class 'dict'>)
2)多元素的集合创建
>>> st = {"a", "b", "c", "d", "e"}
>>> st, type(st)
({'e', 'd', 'b', 'a', 'c'}, <class 'set'>)
>>>
>>> st = {1, 2, 3, [1, 2]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> st = {1, 2, 3, {"age" : 18}}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
3)集合的强转
>>> li = [1, "a", "n", "University"]
>>> st_li = set(li)
>>> st_li, type(st_li)
({1, 'a', 'n', 'University'}, <class 'set'>)
>>>
>>> str = "Universitysity"
>>> st_str = set(str)
>>> st_str, type(st_str)
({'i', 's', 'y', 'r', 'n', 'v', 'e', 't', 'U'}, <class 'set'>)
>>>
>>> dic = {"a": 1, "b": 2, "c": 3, "d": 4}
>>> st_dic = set(dic)
>>> st_dic, type(st_dic)
({'b', 'a', 'c', 'd'}, <class 'set'>)
>>>
>>> tp = (1, 2, 3, 4, 5)
>>> st_tp = set(tp)
>>> st_tp, type(st_tp)
({1, 2, 3, 4, 5}, <class 'set'>)
>>>
2,集合的基本操作
1)查
- 无序,不可查找
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> st[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
>>>
2)增
- set.add()
- set.update()
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> st.add("Computer Science")
>>> st
{1, 2, 'Hunan', 'Computer Science', 'Yingxiao', 'College'}
>>> st.update("湖南", "长沙")
>>> st
{1, 2, '湖', 'Hunan', 'Computer Science', 'Yingxiao', '长', 'College', '南', '沙'}
>>>
3)删
- set.pop()
- set.discard()
- set.remove()
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> st.pop() # 删除排序最小的一个元素
1
>>> st
{2, 'Hunan', 'Yingxiao', 'College'}
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> st.discard(2) # 移除元素
>>> st
{1, 'Hunan', 'Yingxiao', 'College'}
>>> st.discard("HUNAN") # 如果元素不存在,不会报错,不做任何操作
>>> st
{1, 'Hunan', 'Yingxiao', 'College'}
>>>
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> st.remove(2)
>>> st
{1, 'Hunan', 'Yingxiao', 'College'}
>>> st.remove("HUNAN")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'HUNAN'
>>>
- set.clear()
- del set名
>>> st = {1, 2, 3}
>>> st.clear()
>>> st
set()
>>> st = {1, 2, 3}
>>> del st
>>> st
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'st' is not defined
>>>
4)改,不可以更改
>>> st[0] = "Hunan"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support item assignment
>>>
5)遍历
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> for i in st:
... print(i, end = " ")
...
1 2 Hunan Yingxiao College >>>
>>> st = {1, 2, "Hunan", "Yingxiao", "College"}
>>> for index, value in enumerate(st):
... print(index, value)
...
0 1
1 2
2 Hunan
3 Yingxiao
4 College
>>>
3,集合的基本运算
1)子集
>>> a = set("abcd")
>>> b = set("cdef")
>>> c = set("ab")
>>> a, b, c
({'b', 'a', 'c', 'd'}, {'e', 'c', 'f', 'd'}, {'b', 'a'})
>>> c.issubset(a)
True
>>> c < a
True
>>> c < b
False
2)交集
>>> a = set("abcd")
>>> b = set("cdef")
>>> a.intersection(b)
{'c', 'd'}
>>> a & b
{'c', 'd'}
>>>
3)并集
>>> a = set("abcd")
>>> b = set("cdef")
>>> a.union(b)
{'e', 'd', 'b', 'a', 'f', 'c'}
>>> a|b
{'e', 'd', 'b', 'a', 'f', 'c'}
>>>
4)差集
>>> a = set("abcd")
>>> b = set("cdef")
>>> a.difference(b)
{'b', 'a'}
>>> a - b
{'b', 'a'}