python中集合-set
阿新 • • 發佈:2018-11-22
重復 localhost 大括號 discard span 刪除 ace 重復數 super
集合-set
- 集合是高中數學中的一個概念
- 一堆確定的無序的唯一的數據,集合中每一個數據成為一個元素
# 集合的定義 s = set() print(type(s)) print(s) print("*"*30) # 此時,大括號內一定要有值,否則定義出的是一個dict s = {} print(type(s)) print(s) print("*"*30) s = {1,2,3,4,5} print(type(s)) print(s)
<class ‘set‘> set() ****************************** <class ‘dict‘> {} ****************************** <class ‘set‘> {1, 2, 3, 4, 5}
# 如果只是用大括號定義,則定義的是一個dict類型 d = {} print(type(d)) print(d)
<class ‘dict‘> {}
集合的特征
- 集合內數據無序,即你無法使用索引和分片
- 集合內部數據,具有唯一性,可以用來排除重復數據
- 集合內部數據,str, int, float, tuple,冰凍集合等,即內部只能放置可哈希數據
集合序列操作
# 成員檢測 # in not in s = {4,5,"i", "love", "python"} print(s) if "love" in s: print("愛呀") if "haha" notin s: print("挨個錘子")
{‘love‘, 4, 5, ‘python‘, ‘i‘} 愛呀 挨個錘子
集合便利操作
# for 循環 s = {4,5,"i", "love", "python"} for i in s: print(i, end=" ") # 得到的結果就是隨機的
love 4 5 python i
# 帶有元組的集合遍歷 s = {(1,2,3), ("i", "love", "python"), (4,5,6)} for k,m,n in s: print(k, "--", m, "--", n) fork in s: print(k)
i -- love -- python 4 -- 5 -- 6 1 -- 2 -- 3 (‘i‘, ‘love‘, ‘python‘) (4, 5, 6) (1, 2, 3)
集合的內涵
# 普通集合的內涵 # 以下的集合 s = {1,2,3,5,6,2,3,5,1,2,3,2,2,8,4,6,2} print(s) # 普通集合的內涵 ss = {i for i in s if i % 2==0} print(ss)
{1, 2, 3, 4, 5, 6, 8} {8, 2, 4, 6}
# 帶有條件的集合內涵 ss = {i for i in s if i % 2==0} print(ss)
{8, 2, 4, 6}
# 多重循環的集合內涵 s1 = {1,2,3,4} s2 = {"i","love","python"} s = {m*n for m in s2 for n in s1} print(s)
{‘love‘, ‘lovelovelove‘, ‘iiii‘, ‘pythonpythonpythonpython‘, ‘lovelovelovelove‘, ‘ii‘, ‘iii‘, ‘pythonpython‘, ‘python‘, ‘lovelove‘, ‘pythonpythonpython‘, ‘i‘}
集合函數/關於集合的函數
# len, max, min:跟其他基本函數一致 s = {43,23,56,223,4,2,1222,4,323,1} print(len(s)) print( max(s)) print(min(s))
9 1222 1
# set:生成一個集合 l = [1,2,3,4,3,23,1,2,3,4] s = set(l) print(s)
{1, 2, 3, 4, 23}
# add:向集合內添加元素 s = {1} s.add(2) print(s)
{1, 2}
# clear s = {1,5,6,8} print(s) print(id(s)) s.clear() print(s) print(id(s)) # 結果表明clear函數是原地清空數據
{8, 1, 5, 6} 139677107966472 set() 139677107966472
# copy:拷貝 # remove:移除制定的值,直接改變原有值,如果要刪除的值不存在,報錯 # discard:移除集合中指定的值,跟remvoe一樣,但是如果要刪除的話,不報錯 s = {23,3,4,5,1,2,3} s.remove(4) print(s) s.discard(1) print(s) print("*" * 20) s.discard(1100) print(s) s.remove(1100) print(s) # 為啥remove不存在的值會報keyerror 思考?
{1, 2, 3, 5, 23} {2, 3, 5, 23} ******************** {2, 3, 5, 23}
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-54-db7ca460675a> in <module>()
12 print(s)
13
---> 14 s.remove(1100)
15 print(s)
16
KeyError: 1100
# pop 隨機移除一個元素 s = {1,5,2,3,5,6} d = s.pop() print(s) print(d)
{2, 3, 5, 6} 1
# 集合函數 # intersection();交際 # difference():差集 # union:並集 # issubset: 檢查一個集合是否為另一個子集 # issuperset: 檢查一個集合是否為另一個超集 s1 = {1,2,3,4,5,6} s2 = {5,6,7,8,9} s_1 = s1.intersection(s2) print(s_1) s_2 = s1.difference(s2) print(s_2) s_3 = s1.issubset(s2) print(s_3)
{5, 6} {1, 2, 3, 4} False
# 集合數學操作 s1 = {1,2,3,4,5,6} s2 = {5,6,7,8,9} s_1 = s1 - s2 print(s_1) s_2 = s1 + s2 print(s_2)
# 此處不支持數學操作中的+操作
{1, 2, 3, 4}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-58-1393f56445b9> in <module>()
6 print(s_1)
7
----> 8 s_2 = s1 + s2
9 print(s_2)
TypeError: unsupported operand type(s) for +: ‘set‘ and ‘set‘
frozen set:冰凍集合?
- 冰凍和就是不可以進行任何修改的集合
- frozenset是一種特殊集合
# 創建 s = frozenset() print(type(s)) print(s)
<class ‘frozenset‘> frozenset()
python中集合-set