Python第三週Round1-集合

略微不爽,視頻講課的,換老師了,聽的有點彆扭,在鬧了兩天小情緒後,仍是決定繼續聽了,看書看不進去,本身立了flag,含着淚也得豎起來啊。聽了兩段發現,也還能夠,人TM的就是喜歡將就,沒辦法。python

新接觸了<class 'set'>數據類型,讓我對python又產生了新的見解,可能還會有其餘的數據類型,作好思想準備(由於特麼方法太多,難受)。app

1、集合

<class 'set'>spa

(一)對以往數據類型作個總結

1.變量

其實從程序的角度來看, 變量就是用來記錄狀態的變化。也是說,給一個玩意附加一個銘牌,告訴Python(或其餘語言),這個玩意叫啥。code

以上這行字,碼的很沒水平。視頻

2.對一些數據類型進行分類

(1)按可變不可變來分(在內存中地址)blog

每個變量被賦值後,都會在內存中開闢一塊空間,俗話說「使用內存」,根據開闢的這塊空間可不能夠改變,進行以下分類(專門寫給chicken看的,後續有用):索引

  • 可變:列表、字典
# 實踐證實,字典也是可變的數據類型
dic = {'name': '小果果', 'age': '2'}
print(id(dic))  # 輸出dic在內存中的位置
dic['name'] = '名字'  # 修改字典中value的值
print(dic, id(dic))
dic.pop('name')  # 刪除字典中的數據keys和value
print(dic, id(dic))
dic.update({'cloar': '棕色的'})  # 增長字典中的keys和value
print(dic, id(dic))

  

  • 不可變:字符串、元祖、數字
name = 'hello'
print(id(name))
name = '你好'
print(id(name))

 

(2)按訪問順序內存

  • 順序訪問(有序的):字符串、列表、元祖;
  • 映射(無序的):字典;
  • 直接訪問:數字;

(3)存放元素個數rem

  • 容器類型:列表、元祖、字典
  • 原子類型:字符串、數字

(二)集合的知識

集合也是一種數據類型,有三大基本特色:字符串

  • 無序
  • 不一樣元素
  • 必須是不可變的變量

建立集合

# 下面定義的這個name集合會報錯,由於內含字典這種可變量
name = {{'name': '小果果', 'age': '2'}, 2, 'hello'}
print(name)

  

用{set}建立,和字典同樣,用大括號,只是沒有映射關係的冒號。

1.name={1,2,3}

2.name=set{1,2,3}

注意,用 2. 方法,若是大括號內爲可迭代數據類型,通常都給拆開,把迭代元素一個個放到集合中。

(三)基本方法

由於是無序的,和dict同樣,無索引、無切片、無del、無index等功能

1.add()方法

2.clear()方法

3.copy()方法

4.pop()方法 #隨機刪除一個元素

5.remove()方法 #刪除元素不存在時,報錯

6.discard()方法 #刪除元素不存在,不報錯

(四)關係運算

1.交集

# 求交集
s1 = {'沒有起牀氣的', '小果果', '棕色的'}
s2 = {'小果果', '捲毛的', '膽小的'}
print(s1.intersection(s2))  # 輸出 {'小果果'}
print(s1 & s2)

  

2.並集

# 求並集
s1 = {'沒有起牀氣的', '小果果', '棕色的'}
s2 = {'小果果', '捲毛的', '膽小的'}
print(s1.union(s2))  # 輸出 {'小果果', '沒有起牀氣的', '棕色的', '膽小的', '捲毛的'}
print(s1 | s2)

  

3.差集

# 求差集,s1有,s2中沒有的
s1 = {'沒有起牀氣的', '小果果', '棕色的'}
s2 = {'小果果', '捲毛的', '膽小的'}
print(s1.difference(s2))  # 輸出 {'沒有起牀氣的', '棕色的'}
print(s1 - s2)

  

須要注意set.difference_updats()用法,此爲對s1進行update賦值,同理,intersection_update()、symmetric_difference_update()方法,知道就行,不用記住。

4.補集

# 求補集,把s1和s2不同的輸出
s1 = {'沒有起牀氣的', '小果果', '棕色的'}
s2 = {'小果果', '捲毛的', '膽小的'}
print(s1.symmetric_difference(s2))  # 輸出 {'捲毛的', '沒有起牀氣的', '棕色的', '膽小的'}
print(s1 ^ s2)

  

(五)其餘方法

1.isdisjoint() #兩個集合是否有交集,有交集返回False

2.issubset() #兩個集合是否有子集

3.issuperset() #是否有父集

4.update() #放多個值進去,可迭代數據類型均可以,區分下union()

 

(六)其餘注意事項

集合是可變數據類型,但能夠定義成不可變集合

frozenset()方法定義。

 

總結:

  列表 元組 集合 字典
英文 list tuple set dict
能否讀寫 讀寫 只讀 讀寫 讀寫
能否重複
存儲方式 鍵(不能重複) 鍵值對(鍵不能重複)
是否有序 有序 有序 無序 無序,自動正序
初始化 [1,'a'] ('a', 1) set([1,2]) 或 {1,2} {'a':1,'b':2}
添加 append 只讀 add d['key'] = 'value'
讀元素 l[2:] t[0] d['a']
相關文章
相關標籤/搜索