集合

集合(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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章