集合(set())
- 無序
- 不可重複
- 不可更改
- 內部的元素是可哈希的
- 集合本身是不可哈希的
- 用{}括起來的單元素數據集
用途:
- 去重(列表—>集合,自動去重)
- 關係測試
集合的創建
空集合
st = set()
print(type(st))
# <class 'set'>
多元素的集合創建
# 集合的元素必須爲不可變數據類型
st = {1, 2, 3, "a", "b", "c", ["a", "b"]}
Traceback (most recent call last):
File "D:/python/test1/day04.py", line 152, in <module>
st = {1, 2, 3, "a", "b", "c", ["a", "b"]}
TypeError: unhashable type: 'list'
強轉
li = [1, 2, 3, "a"]
st = set(li)
print(type(st), st)
# <class 'set'> {1, 2, 3, 'a'}
sr = "citty"
st = set(sr)
print(type(st), st)
# <class 'set'> {'t', 'c', 'i', 'y'} 會打亂順序,並去重
dic = {"id": 20190101, "name": "jack", "age": 17}
st = set(dic)
print(st)
# {'id', 'name', 'age'} 字典轉成其他數據類型只會取鍵
集合的基本操作
增
- set.add()
- set.update()
刪
- set.pop(),刪除排序最小的一個元素
- set.discard(),移除元素,不存在,不會報錯,無返回值
- set.remove(),移除元素,不存在,會報錯
- del set
- set.clear()
st = {1, 2, 3, "a", "bb", "ccc", "asdc"}
print(st.pop())
# 1
st = {1, 2, 3, "a", "bb", "ccc", "asdc"}
print(st.discard("a"))
# None
print(st)
# {1, 2, 3, 'asdc', 'ccc', 'bb'}
set.remove("dd")
Traceback (most recent call last):
File "D:/python/test1/day04.py", line 154, in <module>
set.remove("dd")
TypeError: descriptor 'remove' requires a 'set' object but received a 'str'
改
無序,不可改的
查
無序,不可查的
遍歷
st = {1, 2, 3, "a", "bb", "ccc", "asdc"}
for i in st:
print(i, end=' ')
# 1 2 3 bb a ccc asdc
for i in enumerate(st):
print(i, end=' ')
# (0, 1) (1, 2) (2, 3) (3, 'bb') (4, 'asdc') (5, 'ccc') (6, 'a')
集合的基本運算
子集
- <
- set.issubset()
a = set("abcd")
b = set("cdef")
c = set("ab")
print(c < a)
# True
print(c.issubset(a))
# True
交集
- &
- set.intersection()
a = set("abcd")
b = set("cdef")
c = set("ab")
print(a & b)
# {'d', 'c'}
print(c.intersection(a))
# {'a', 'b'}
並集
- |
- set.union()
a = set("abcd")
b = set("cdef")
c = set("ab")
print(a | b)
# {'e', 'f', 'c', 'a', 'b', 'd'}
print(c.union(a))
# {'e', 'c', 'a', 'b', 'd', 'f'}
差集
- -
- set.difference()
a = set("abcd")
b = set("cdef")
c = set("ab")
print(a - b)
# {'a', 'b'}
print(c.difference(a))
# set()