Python 數據結構三

set,字典,操作,封裝和解構,以及生成器和內建函數

集 Set集

Set set 翻譯為集合

collection 翻譯為集合類型,是一個大概念

set 是可變的 無序的 不重復的 元素集合
set() 定于一個空集合

set(iterable) 括號里面是可迭代對象

set() 集合里不可以放入可變元素
set()的元素要求必須可以hash

目前學過的不可hasb的類型有list,set

元素不可以索引

set可以迭代

Set 增加

add(elem) 增加一個元素到set

如果元素存在,什么都不做
update(*others)

合并其他元素set集合中來

參數others必須是可迭代對象

就地修改

Set 刪除

remove(elem)

從set中移除一個元素,元素不存在,拋出KeyError異常

discard(elem) 從set中移除一個元素,元素不存在,什么都不做

pop() –> item 移除并返回任意的元素,空集返回keyerror異常

clear() 移除所有元素

Set 修改,查詢

修改,要么刪除,要么加入新的元素

非線性結構無法查詢

遍歷

可迭代所有元素

成員運算符

in和not in 判斷元素是否在set中

Set和線性結構

線性結構的查詢時間復雜度是O(n),即隨著數據規模的增大而增加耗時 set、dict等結構,內部使用hash值作為Key,時間復雜度可以做到O(1) ?查詢時間和數據規模無關

可 hash

數值型 int、float、complex

布爾型 True false

字符串 string bytes

tuple

None

以上都是不可變類型,成為可哈希類型,hashable
set的元素必須是可hash的

集合基本概念

全集:所有元素的集合,例如實數,所有實數組成的集合就是全集
子集subset和超集superset:一個集合A的所有元素都在另一個集合B內,A是B的子集,B是A的集
真子集和真超集:A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
并集:多個集合合并的結果

交集:多個集合公共部分

差集:集合中除去和其他集合公共部分

 

封裝和解構

封裝

將多個值使用逗號分割,組合在一起 本質上,返回一個元組,只是省掉了小括號

t1 = (1,2) #定義為元組 t2 = 1,2 ? #將1和2封裝成元組 type(t1) type(t2)

封裝

a = 4

b = 5

temp = a

a = b

b = temp

等價于 ? a,b = b,a

解構

把線性結構的元素解開,并順序的獻給其他 變量 左邊接納的變量數要喝右邊解開的元素個數一致

lis = [2,3]

first,second = lis

print(first,second)

Python3 的解構

使用 *變量名 接收,但不能單獨使用 被 *變量名 收集后組成一個列表

lis = list(range(1,101,2))

head,*mid,stil = lis

變量丟棄

如果不關心一個變量,就可以改變量的名字為 “_”

set的元素必須可以hash
小集合運算 大集合 考慮內存

集合運算
并集:將兩個集合A和B的所有元素合并到一起,組成的集合稱作集合A與集合B的并集

s1 = {1,2,3}

s2 = {2,3,4}

s = s1 | s2 –>{1,2,3,4}

交集:將兩個集合A和B的所有的元素合并到一起,組成的集合稱作集合A與集合B的并集

s1 = {1,2,3}

s2 = {2,3,4}

s = s1&s2 –> {2,3}
差集:將集合A和B,由所有屬于A且不屬于B的元素組成的集合

s1 = {1,2,3}

s2 = {2,3,4}

s = s1-s2 –> {1} s = s2-s1 –> {4}
對稱差集:集合A和B,由所有不屬于A和B的交集元素組成的集合

s1 = {1,2,3}

s2 = {2,3,4}

s = s1^s2 –> {1,4}
issbset(other) <=

判斷當前集合是否是另一個集合的子集

set1 < set2

判斷set1是否是set2的真子集.

issuoerset(other) >=

判斷當前集合是否是other的超集

set1 < set2

判斷set1是否是set的真超集

isdisjoint(other)

當前集合和另一個集合沒有交集

沒有交集,返回True

字典 dictionarise 字典是一個 可變的 無序的 Key不重復的 類方法

dict.formkeys(range(5))

dict.formkeys(rang(5),0)

字典的訪問

d[key]

返回key對應的值vlue key不存在拋出KeyError異常

get(key[,default])

返回key對應的value key不存在返回缺省值,如果沒有設置缺省值就返回None

setdefault(key[,defasult])

返回key對應的值value key不存在,增添kv對,value為default,并返回default,如果default沒有設置,缺省為None

d = {‘a’:’1′,’b’:’2′} e = {‘x’:’3′,’z’:’4′}

d.setdefault(‘d’,10)

print(d)

d.get(‘d’)

字典增加和修改

d[key] = value ?將key對應的值修改為value

key 不存在增加新的kv對

update([other]) –> None

使用另一個字典的kv對更新本字典 key 不存在,就添加 key存在,覆蓋已經存在的key對應的值 就地修改

d = {‘a’:’1′,’b’:’2′}

e = {‘x’:’3′,’z’:’4′}

d.update(e)

print(d)

d.update(e)

print(d)

d = {‘a’:’1′,’b’:’2′}

e = {‘x’:’3′,’z’:’4′}

d.update({‘red’:55})

print(d)

字典的刪除

pop(key[,default])

key存在,移除它,并返回它的value

key不存在,返回給定的default

popitem()

移除并返回一個任意的鍵值對

字典為empty,跑出keyError

clear() 清空字典

字典遍歷

for .. in dict

遍歷 key

for k in d:

print(k)

for k in d.keys():

print(k)

遍歷 value

for k in d:

print(k)

for k in d.keys():

print(d.get(k))

字典的key hashable 可哈希才可以作為key

collections.defaultdict([default_factory[,…]])

第一個參數是default_factory,缺省是None,他提供一個初始化函數,當key不存在的時候,會調用這個工廠函數來生成key對應的value
collections.OrderedDict([items])

key 并不是按照加入的順序排列,可以使用OrdereDict記錄順序 有序字典可以記錄勻速插入的順序,打印的時候也是按照這個順序輸出打印

 

標準庫

datetime模塊

對日期、時間、時間戳的處理

datetime類

類方法方

today()返回本地時區當前時間的datetime對象

now(tz=None)返回當前時間的datetime對象,時間到微妙,如果tz為None,返回和today()一樣

utcnow()沒有時區的當前時間

fromtimestamp(timestamp,tz=None)從一個時間戳返回一個datetime對象

datetime對象

timestamp()返回一個到微妙的時間戳

時間戳:格林威治時間1970年1月1日0點到現在的秒數

datetime對象

構造方法 datetime.datetime(2016,12,66,16,29,43,79043)

year、month、day、hour、minute、second、microsecond,取datetime對象的年月日時分秒及微妙 weekday() 返回星期的天,周一0,周日6

isoweekday() 返回星期的天,周一1,周日7

date() 返回日期date對象

time() 返回時間time對象

replace() 修改并返回新的時間

isocalendar() 返回一個三元組(年,周數,周的天)

列表解析

生成一個列表0-9,對每一個元素自增1后求平方根返回新的列表
l = [(i+1)**2 for i in (range(10))]

print(l)

print(type(l))
語法

[返回值 for 元素 in 可迭代對象 if]

使用中括號[], 內部是for循環, if條件語句可選 返回一個新的列表

列表解析進階

[expr for item in iterable if cond1 if cond2]

[i for i in range(10) if x%2==0 and if x%3==0]

[exper for i in iterable1 for j in iterable2] [(x,y) for x in ‘abcde’ for y in range(3)]

生成器

語法(返回值 for 元素 in 可迭代對象 if 條件)

列表解析式的中括號換成小括號就行了

返回一個生成器 延遲計算

返回迭代器,可以迭代

從前到后走完一遍,不能回頭

和列表解析式的區別

生成器表達式是按需計算(或稱惰性求職、延遲計算),需要的時候才計算

列表解析式是立即返回值
生成器表達式省內存,列表解析式返回新的列表

集合解析式

{返回值 for 元素 in 可迭代對象 if條件}

列表解析式的中括號換成大括號{}就可以 立即返回一個集合

字典解析式

{返回值 for 元素 in 可迭代對象 if 條件}

列表解析式的中括號換成大括號{}就可以

使用key:value形式 立即返回一個字典

{chr(0x41+x):x**2 for x in range(10)}

內建函數

標識 id 返回對象的唯一標識,CPython返回內存地址

哈希 hash() ?返回一個對象的哈希值 類型 type() ?返回對象的類型

類型轉換

flot()、int()、bin()、hex()、oct()、list()、tuple()、dict()、set() 、comple()、bytes、bytearry()

輸入 input() 接受用戶輸入,返回一個字符串

對象長度 len(s) 返回一個集合類型的元素個數

isinstance(obj,class_or_tuple) 判斷對象obj是否屬于某種類型或者元組中列出的某個類型 isinstance(True,int)

issubclass(cls,class_or_tuple)

判斷類型cls是否是某種類型的子類或元組中列出的某個類型的子類 issubclass(bool,int)

絕對值 abx(x) ? x為數值

最大值 max(x) ? 最小值min()

round(x) 四舍六入五去偶,round(-0.5) pow(x,y)

等價于 x**y sum(iterable[,start]) 對可迭代對象的所有數值元素求和

sum(range(1,100,2))

chr(i) 給一個一定范圍的整數返回對應的字符

chr(97) chr(20013) ord(‘a’) ord(‘中’) ?返回字符對應的整數
sorted(iterable[,key][,reverse]) ?排序

翻轉 reversed(seq)

 

枚舉

enumerate(seq,start=0)? 迭代一個序列,返回索引數字和元素構成的二元組

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87746

(0)
5220367552203675
上一篇 2017-10-10 15:02
下一篇 2017-10-10 16:56

相關推薦

  • 高階函數和裝飾器

    高階函數和裝飾器 高階函數 : 滿足以下條件之一的稱為高階函數 接受一個或多個函數作為參數 輸出一個函數 高階函數舉例: def counter(base): def inc(step=1): nonlocal base base += step return base return inc 1)自定義sort函數 def sort(itertable): …

    Python筆記 2018-04-23
  • IPython封裝解構和集合

    IPython Shell命令 !command 執行shell命令 !ls -l , !touch a.txt file = !ls -l | grep py 魔術方法 使用%開頭的,IPython內置的特殊方法 %magic 格式 %開頭是line magic %% 開頭是cell magic,notebook的cell %alias 定義一個系統命令的…

    Python筆記 2018-03-31
  • Python 部分知識點總結(十)

    此篇博客只是記錄第十二周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-05-28
  • python學習總結

    內建函數、函數、插入排序、樹

    2018-04-15
  • Python基礎之if while for循環練習

    if for while循環練習 沒有邊界的最好用while,有邊界的最好用for 1.給定一個不超過5位數的正整數,判斷其有幾位 num = int(input()) if num<10: print(‘一位’) elif num<100: print(‘兩位’) elif num<1000: print(‘三位’) elif num&l…

    2017-09-16
  • Python內置數據結構-list、tuple、string

    Python內置數據結構 分類 數值型 int、float、complex、bool 序列對象 字符串 str 列表 list 元組 tuple 鍵值對 集 set 字典 dict 數值型 數值型 int、float、complex、bool都是類(class),1、5.0、1+2j都是對象即實例 int:在python3版本中表示長整型,沒有大小限制,受限…

    2017-09-23
欧美性久久久久