Python 部分知識點總結(三)

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

一、dict

  1. key-value 鍵值對的數據的集合
    可變的,無序的,key不重復
  2. 定義
    d = dict()? 或者 d = {}
    dict(**kwargs) 使用 name=value對 初始化一個字典
    dict(iterable,**kwarg) 使用可迭代對象和 name=value對 構造字典,不過可迭代對象的元素必須是一個二元結構
    ?d = dict(((1,’a’),(2,’b’))) 或者 d = dict(([1,’a’],[2,’b’]))
    dict(mapping,**kwarg) 使用一個字典構建另一個字典
    d = {‘a’:10,’b’:20,’c’:None,’d’:[1,2,3]}
    類方法 dict.fromkeys(iterable,value)
    d = dict.fromkeys(range(5))? ? ?–>? ? {0: None, 1: None, 2: None, 3: None, 4: None}
    d = dict.fromkeys(range(5),0)? ?–>? ?{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
  3. 訪問
    ?d[key]:返回 key 對應的值 value;key 不存在拋出 KeyError 異常
    ?get(key[,default]):返回 key 對應的值 value;key 不存在返回缺省值,如果沒有設置缺省值,返回 None
    setdefault(key[,default]):返回 key 對應的值 value;key 不存在,添加 kv 對,value 為 default,并返回default,如果 default 沒設置,缺省值為 None
  4. 增加和修改
    d[key] = value
    將 key 對應的值修改為 value
    key 不存在添加新的 kv對
    update([other])? –> None
    ? ? ? 使用另一個字典的 kv對 更新字典
    ? ? ? key 不存在,就添加
    ? ? ? key 存在,覆蓋已經存在的 key 對應的值
    ? ? ? 就地修改
  5. 刪除
    ?pop(key[,default])
    ? ? ? key 存在,移除它,并返回它的 value
    ? ? ? key 不存在,返回給定的 default
    ? ? ? default 未設置,key 不存在則拋出 KeyError 異常
    ?popitem()
    ? ? ? ? 移除并返回一個任意的鍵值對
    ? ? ? ? 字典為 empty,拋出 KeyError 異常
    clear()? ?清空字典
    ? ?del 語句
    ? ? ? ? del 看著像刪除一個對象,本質上減少了一個對象的引用,del 實際上刪除的是名稱,而不是對象
  6. 遍歷
    ? ? ?遍歷 key
    ? ? ?for k in d:
    ? ? ? ? ? ? print(k)
    ? ? ? for k in d.keys():
    ? ? ? ? ? ? print(k)
    ? ? ? ?遍歷 value
    ? ? ? ? ? ?for k in d:
    ? ? ? ? ? ? ? ?print(d[k])
    ? ? ? ? ? ?for k in d.keys():
    ? ? ? ? ? ? ? ? print(d.get(k))
    ? ? ? ? ? ?for v in d.values():
    ? ? ? ? ? ? ? ?print(v)
    ? ? ? ? 遍歷 item,即 kv對
    ? ? ? ? ? ? ? for item in d.items():
    ? ? ? ? ? ? ? ? ? print(item)
    ? ? ? ? ? ? ? for item in d.items():
    ? ? ? ? ? ? ? ? ? print(item[0],item[1])
    ? ? ? ? ? ? ? for k,v in d.items():
    ? ? ? ? ? ? ? ? ? print(k,v)
    ? ? ? ? ? ? ? for k,_ in d.items():
    ? ? ? ? ? ? ? ? ? print(k)
    ? ? ? ? ? ? ? for _,v in d.items():
    ? ? ? ? ? ? ? ? ? print(v)
    ? ? Python3中,keys、values、items 方法返回一個類似一個生成器的可迭代對象,不會把函數的返回結果復制到內存中
    ? ? ?Dictionary view 對象
    ? ? ?字典的 entry 的動態的視圖,字典變化,視圖將反應出這些變化
  7. 一邊遍歷一邊清空
    要求刪除 value 為字符串的元素
    d = dict(a=1,b=2,c=’abc’)
    keys = []
    for k,v in d.items():
    ????if isinstance(v,str):
    ????????keys.append(k)
    print(keys)
    for k in keys:
    ????d.pop(k)
    print(d)
  8. key 的要求
    ? set 元素可以就是看作 key,set 可以看作 dict 的簡化版
    ? hashable 可哈希才可以作為 key,可以使用 hash() 測試
  9. collections.defaultdict([default_factory[,…]])
    ?第一個參數是 default_factory,缺省是 None,它提供一個初始化函數,當 key 不存在的時候,會調用這個工工廠函數來生成 key 對應的 value
    import random
    d = {}
    for k in ‘abcdef’:
    ????for i in range(random.randint(1,5)):
    ????????if k not in d.keys():
    ????????????d[k] = []
    ????????d[k].append(i)
    print(d)
    ——————————————————————————
    from collections import defaultdict
    import random
    d = defaultdict(list)? ? #是為了下面要用
    for k in ‘abcdef’:
    ????for i in range(random.randint(1,5)):
    ????????d[k].append(i)? ? ? #如果 k 不存在,則d[k] = list()
    print(d)
  10. collections.OrderedDict([items])
    ?key 并不是按照加入的順序排列,可以使用 OrderedDict 記錄順序
    from collections import OrderedDict
    import random
    d = {‘b’:3,’a’:4,’p’:1,’o’:2}
    print(d)
    keys = list(d.keys())
    random.shuffle(keys)
    print(keys)
    od = OrderedDict()
    for key in keys:
    ????od[key] = d[key]
    print(od)
    print(od.keys)
  11. 有序字典可以記錄元素插入的順序,打印的時候也是按照這個順序輸出打印
    ? 3.6 版本的Python 的字典就是記錄 key 插入的順序(IPython 不一定有效果)
    ? ? ? ?應用場景:
    ? ? ? ? ? ?假如使用字典記錄了 N 個產品,這些產品使用 ID 由小到大加入到字典中
    ? ? ? ? ? ?除了使用字典檢索的遍歷,有時候需要取出 ID,但是希望是按照輸入的順序
    ? ? ? ? ? ?否則還需要重新把遍歷到的值排序

二、datetime

  1. datetime 模塊是對日期、時間、時間戳的處理
  2. datetime 類
    ?today() 返回本地時區當前時間的 datetime 對象
    ?now(tz=None) 返回當前時間的 datetime 對象,時間到微秒,如果 tz 為None,返回 和 today() 一樣
    ?utcnow() 沒有時區的當前時間
    ?fromtimestamp(timestamp,tz=None)? 從一個時間戳返回一個 datetime 對象
  3. datetime 對象
    ?timestamp() 返回一個到微秒的時間戳,時間戳就是格林威治時間1970年1月1日0點到現在的秒數
    構造方法 datetime.datetime(2016,12,6,16,29,43,79043)year、month、day、hour、minute、second、microsecond,取 datetime 對象的年月日時分秒及微秒
    ? ? ? ? ? weekday()? ? ? ? ? ? ? ? 返回星期的天,周一0,周日6
    ? ? ? ? ? isoweekday()? ? ? ? ? ? 返回星期的天,周一1,周日7
    ? ? ? ? ? date()? ? ? ? ? ? ? ? ? ? ? ?返回日期 date 對象
    ? ? ? ? ? time()? ? ? ? ? ? ? ? ? ? ? ?返回時間 time 對象
    ? ? ? ? ? replace()? ? ? ? ? ? ? ? ? ?修改并返回新的時間
    ? ? ? ? ? isocalendar()? ? ? ? ? ? 返回一個三元組(年,周數,周的天)
  4. 日期格式化
    ?類方法 strptime(date_string,format) ,返回 datetime 對象
    ?對象方法 strftime(format),返回字符串
    ?字符串 format 函數格式化
    >>> import datetime
    >>> dt = datetime.datetime.strptime(“21/11/06 16:30″,”%d/%m/%y %H:%M”)
    >>> print(dt)
    2006-11-21 16:30:00
    >>> print(dt.strftime(“%Y-%m-%d %H:%M:%S”))
    2006-11-21 16:30:00
    >>> print(“{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%M}::{0:%S}”.format(dt))
    2006/11/21 16::30::00
  5. timedelta 對象
    >>> datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=1,weeks=0)
    ?datetime.timedelta(0, 3600)
    >>> year = datetime.timedelta(days=365)
    ?>>> year
    ?datetime.timedelta(365)
    total_seconds()? 返回時間差的總秒數
  6. time
    time.sleep(secs)? 將調用線程掛起指定的秒數

三、列表解析式

  1. 語法
    ?[返回值 for 元素 in 可迭代對象 if 條件]
    ?使用中括號 [],內部是 for 循環,if 條件語句可選
    ?返回一個新的列表
  2. 列表解析式是一種語法糖
    ?編譯器會優化,不會因為簡寫而影響效率,反而因優化提高提高了效率
    ?減少程序員工作量,減少出錯
    ?簡化了代碼,但可讀性增強
  3. # 返回 1 – 10 平方的列表
    ?[i**2 for i in range(1,11)]
    # 有一個列表 lst = [1,4,9,16,2,5,10,15],生成一個新列表,要求新列表元素是 lst 相鄰 2 項的和
    [[1,4,9,16,2,5,10,15][i]+[1,4,9,16,2,5,10,15][i+1] for i in range(len([1,4,9,16,2,5,10,15])-1)]
    # 打印九九乘法表
    {print(“{}*{}={:<2}{}”.format(j,i,i*j,’\n’ if i==j else ‘ ‘),end=”) for i in range(1,10) for j in range(1,i+1)}
    # “0001.abadicddws” 是 ID 格式,要求 ID 格式是以點號分割,左邊是 4 位從 1 開始的整數,右邊是 10 位隨機小寫英文字母,請依次生成前 100 個 ID 的列表
    import random
    import string
    {print(“{:04}.{}”.format(i,”.join(random.choice(string.ascii_lowercase) for _ in range(10)))) for i in range(1,101)}

四、內建函數

  1. 標識?id :返回對象的唯一標識,CPython?返回內存地址
  2. 哈希?hash():返回一個對象的類型
  3. 類型?type() :返回對象的類型
  4. 類型轉換:float(),int(),bin(),hex(),oct(),bool(),list(),tuple(),dict(),set(),complex(),bytes(),bytearray()
  5. 輸入 input([prompt]):接收用戶輸入,返回一個字符串
  6. 打印?print(*objects,sep=’ ‘,end=’\n’,file=sys.stdout,flush=False):打印輸出,默認使用空格分割,換行結尾,輸出到控制臺或者輸出至一個文件
  7. 對象長度?len(s):返回一個集合類型的元素合數
  8. isinstance(obj,class_or_tuple):判斷對象?obj?是否屬于某種類型或者元祖中列出的某個類型,如 isinstance(True,int)
  9. issubclass(cls,class_or_tuple):判斷類型?cls?是否是某種類型的子類或元祖中列出的某個類型的子類,如 issubclass(bool,int)
  10. 絕對值?abs(x),x?為數值
  11. 最大值?max(),最小值 min():返回可迭代對象中最大或最小值;返回多個參數中最大或最小值
  12. round(x)?四舍六入五取偶,round(-0.5)? ?–> 0
  13. pow(x,y)?等價于?x**y
  14. range(stop)? 從 0?開始到?stop-1?的可迭代對象;range(start,stop[,step])?從start?開始到?stop-1?結束步長為?step?的可迭代對象
  15. divmod(x,y)?等價于?tuple(x//y,x%y)
  16. sum(iterable[,start])?對可迭代對象的所有數值元素求和,如?sum(range(1,100,2))
  17. chr(i)?給一個一定范圍的整數返回對應的字符,如 chr(97)、chr(20013)
  18. ord(c)?返回字符對應的整數,如?ord(‘a’)、ord(‘中’)
  19. str()、rep()、ascii()
  20. sorted(iterable[,key][,reverse])?排序:返回一個新的列表,默認升序
  21. 翻轉?reversed(seq):返回一個翻轉元素的迭代器
  22. 枚舉 enumerate(seq,start=0):迭代一個序列,返回索引數字和元素構成的二元組;start?表示索引開始的數字,默認是 0
    >>> list(enumerate(range(5)))
    [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
    >>> list(enumerate(range(5),100))
    [(100, 0), (101, 1), (102, 2), (103, 3), (104, 4)]
  23. 迭代器和取元素 iter(iterable)、next(iterator[,default])
    ? ? ? ? iter?將一個可迭代對象封裝成一個迭代器
    ? ? ? ? next?對一個迭代器取下一個元素,如果全部元素都取過了,再次?next?會拋?StopIteration?異常
    ? ? ? ? ? ? ? ? ?it = iter(range(5))
    ? ? ? ? ? ? ? ? ?next(it)
    ? ? ? ? ? ? ? ? ?it =reversed([1,3,5])
    ? ? ? ? ? ? ? ? ?next(it)
  24. 可迭代對象
    ?能夠通過迭代一次次返回不同的元素的對象
    所謂相同,不是指值是否相同,而是元素在容器中是否是同一個,例如?列表中值可以重復的,[‘a’,’a’],雖然這個列表有 2?個元素,值一樣,但是兩個 ‘a’?是不同的元素
    可以迭代,但是未必有序,未必可索引
    可迭代對象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器
    可以使用成員操作符?in、not?in,in?本質上就是在遍歷對象
  25. 拉鏈函數?zip(*iterable)
    像拉鏈一樣,把多個可迭代對象合并在一起,返回一個迭代器
    將每次從不同對象中取到的元素合并成一個元祖
    >>> list(zip(range(3),range(3)))
    [(0, 0), (1, 1), (2, 2)]
    >>> list(zip(range(3),range(5)))
    [(0, 0), (1, 1), (2, 2)]
    木桶原理

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

(0)
龐豪龐豪
上一篇 2018-04-08 21:22
下一篇 2018-04-08 22:05

相關推薦

  • Python第三周小結

    經過了三周的學習,我們已經基本完成了Python基礎數據結構的學習,包括列表,字符串,元組,bytes, bytearray, set, 字典等。為了更好的理解和熟練使用這些基本的數據結構,我將它們各自的特點分別總結 并做成了表格,希望能夠幫助我們更好的理解的同時,熟練掌握這些數據結構。    

    2018-04-10
  • Python函數返回值、作用域以及樹的概念

    Python函數返回值、作用域以及樹的概念

    Python筆記 2018-04-15
  • Linux介紹

    Linux介紹 Linux概述 Linux概述 Linux內核由芬蘭人Linus Torvalds 1991年根據386架構開發。Linux是系統的內核并非系統,之后的RED HALT 、Centos等都是以Linux為內核的類UNIX操作系統。 1969年UNIX系統由THOMPSON和D.M.Riche在美國貝爾實驗室開發 1990年芬蘭人Linus T…

    Python筆記 2018-03-26
  • StringIO

    StringIOio模塊中的類From io import StringIO內存中,開辟的一個文本模式的buffer,可以像文件對象一樣操作它當close方法被調用的時候,這個buffer會被釋放StringIO操作getvalue() 獲取全部內容。跟文件指針沒有關系from io import StringIO# 內存中構建sio = StringIO(…

    Python筆記 2018-05-07
  • Python 部分知識點總結(八)

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

    Python筆記 2018-05-13
  • Python第十四周網絡知識和數據庫知識總結

    高性能集群Linux virtual server、Nginx、高可用性集群keepalived

    Python筆記 2018-06-10
欧美性久久久久