1. 程式人生 > >python中集合-set

python中集合-set

重復 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" not
in 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)
    
for
k 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