Python基礎(chǔ)教程第二版 筆記

第一章 基礎(chǔ)知識(shí)

第二章 列表和元組

  1. 序列概覽

    • 6種內(nèi)建的序列: 列表案怯,元組挪钓,字符串,Unicode字符串馆里,buffer對(duì)象 和 xrange對(duì)象
    • 容器( container )數(shù)據(jù)結(jié)構(gòu):容器基本上是包含其他對(duì)象的任意對(duì)象轩勘。
    • 序列(如列表和元組)和映射(如字典)是兩類主要的容器筒扒。 至于即不是序列,也不是映射的容器類型绊寻,集合(set)就是一個(gè)例子花墩。
  2. 通用序列操作

    • 索引(indexing),分片(sliceing)澄步,加(adding)冰蘑,乘(multiplying)

    • 以及檢查某個(gè)元素是否屬于序列的成員(成員資格)。

    • 此外還有驮俗,序列長(zhǎng)度懂缕,最大元素允跑,最小元素 的內(nèi)建函數(shù)王凑。

    • 成員資格 in:

      • 'w' in 'rw'
      • True
  3. 列表: Python 的 “苦力”

    1. list函數(shù) ,根據(jù)字符串創(chuàng)建列表
      • list('hello')
      • ['h','e','l','l','o']
      • 【注】 list適用于所有類型的序列聋丝,不只是字符串
    2. 基本的列表操作:
      • 改變列表索烹,元素賦值 (不能為不存在的元素賦值)
      • 刪除元素
        • names = ['alice', 'bill']
        • del names[0]
        • ['bill']
      • 分片賦值
        • name = list('Perl')
        • name[1:] = list('ython')
        • ['P', 'y', 't', 'h', 'o', 'n']
    3. 列表方法
      • append 在列表末尾追加新的對(duì)象
        • a = [1,2,3]
        • b = [4,5,6]
        • a.append(b)
        • [1,2,3 , [4,5,6] ]
      • count 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)
      • extend 在列表末尾追加另外一個(gè)序列中的多個(gè)值,類似加法弱睦,但會(huì)改變序列值
        • a = [1,2,3]
        • b = [4,5,6]
        • a.extend(b)
        • [1,2,3 ,4,5,6 ]
        • #########################
        • a = [1,2,3]
        • b = [4,5,6]
        • a + b ## [1,2,3 ,4,5,6 ]
        • a 的值沒有改變

        • a = a + b 連接操作的效率會(huì)比 extend 方法低百姓。

      • index 從列表中找出某個(gè)值的第一個(gè)匹配項(xiàng)的索引
        • name = ['i' , 'we' , 'you', 'we']
        • name.index('we')
        • 1
      • insert 將對(duì)象插入到列表中
        • name = [1,2,3,4,5]
        • name.insert(3,'four')
        • [1,2,3, 'four' ,4,5]
      • pop 移除列表中的一個(gè)元素(默認(rèn)是最后一個(gè)),且返回該元素值
        • x = [1,2,3]
        • x.pop()
        • 3
        • x
        • [1,2]
        • 【注】 pop 方法是唯一一個(gè)既能修改列表又返回元素值(除了None)的列表方法
        • 使用pop可以實(shí)現(xiàn)一種常見的數(shù)據(jù)結(jié)構(gòu)--棧况木。 LIFO 先進(jìn)先出
      • remove 移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)
        • x = ['to', 'be' , 'or', 'be']
        • x.remove('be')
        • x
        • ['to', 'or', 'be']
        • remove 是一個(gè)沒有返回值的原位置改變方法垒拢,它修改了列表卻沒有返回值旬迹,這與pop方法相反。

      • reverse 將列表中的元素反向存放
        • x = [1,2,3]
        • x.reverse()
        • x
        • [3,2,1]
        • 如需對(duì)一個(gè)序列進(jìn)行反向迭代求类,可以試用reversed函數(shù)奔垦。這個(gè)函數(shù)并不返回一個(gè)列表,而是返回一個(gè)迭代器(iterator)對(duì)象尸疆。 可以試用list函數(shù)把返回的對(duì)象轉(zhuǎn)換成列表也是可行的椿猎。

      • sort 在原位置對(duì)列表進(jìn)行排序。
        • “原位置排序”意味著改變?cè)瓉?lái)的列表寿弱,而不是簡(jiǎn)單的返回一個(gè)已排序的副本犯眠。
        • x = [1,3,2,4]
        • x.sort()
        • x
        • [1,2,3,4]
        • sort 返回空值

        • x = [1,3,2,4]
        • y = x.sort() # Don't do this !
        • print y
        • None
        • 正確的獲得x副本的做法

        • x = [1,3,2,4]
        • y = x[:]
        • y.sort()
        • x
        • [1,3,2,4]
        • y
        • [1,2,3,4]
        • 調(diào)用 x[:]得到包含了x所有元素的分片,是一種很有效率的復(fù)制整個(gè)列表的方法症革。

        • 只是簡(jiǎn)單的把x賦值給y是沒用的筐咧,因?yàn)檫@樣,x和y都指向同一個(gè)列表了地沮。

        • 另一種獲取已排序的列表副本的方法是嗜浮,使用sorted函數(shù):
        • x = [1,3,2,4]
        • y = sorted(x)
        • x
        • [1,3,2,4]
        • y
        • [1,2,3,4]
        • sorted實(shí)際上可以用于任何序列,卻總是返回一個(gè)列表
        • sorted('Python')
        • ['P','h','n','o','t','y']
        • 如果想相反的順序排序摩疑,可以調(diào)用 reverse 方法危融。

      • 高級(jí)排序
        • 可以為 sort 或 sorted 函數(shù)指定參數(shù),來(lái)自定義排序
        • 比較函數(shù) ,可自定義

        • cmp(42,32)
        • 1
        • cmp(99,100)
        • -1
        • cmp(10,10)
        • 0
        • num = [5,2,9,7]
        • num.sort(cmp)
        • num
        • [2,5,7,9]
        • sort 返回還有另外兩個(gè)可選的參數(shù)-- key 和 reverse

        • 參數(shù)key和 參數(shù)cmp類似雷袋,必須提供一個(gè)在排序過(guò)程中使用的函數(shù)
        • x = ['bb' , 'a' , 'aaaa']
        • x.sort(key=len)
        • x
        • ['a', 'bb', 'aaa']
        • reverse是簡(jiǎn)單的布爾值吉殃,指明列表是否要進(jìn)行反向排序。
    4. 元組: 不可變序列
      • 元組創(chuàng)建
        • 也可以不用括號(hào)

        • 1楷怒,2蛋勺,3
        • (1,2鸠删,3)
        • 用括號(hào)也可以

        • (1抱完,2,3)
        • (1刃泡,2巧娱,3)
        • 一個(gè)值的元組 , 逗號(hào)很重要

        • 42
        • 42
        • 42,
        • (42,)
        • (42,)
        • (42,)
        • (42)和42是完全一樣的烘贴,但是禁添,一個(gè)逗號(hào)卻能徹底改變表達(dá)式的值

        • 3*(40+2)
        • 126
        • 3*(40+2,)
        • (42,42,42)
      • tuple 函數(shù)
        • 與list函數(shù)基本是一樣的,以一個(gè)序列作為參賽桨踪,并把它轉(zhuǎn)換為元組
        • 如果參數(shù)數(shù)元組老翘,則原樣返回
        • tuple([1,2,3])
        • (1,2,3)
        • tuple('abc')
        • ('a','b','c')
        • tuple((1,2,3))
        • (1,2,3)
      • 基本元組操作
        • 元組其實(shí)并不復(fù)雜,除了元組創(chuàng)建和訪問(wèn)元組元素之外,沒有太多其他操作铺峭。
        • x = 1,2,3
        • x[1]
        • 2
        • x[0:2]
        • (1,2)
        • 元組的分片還是元組

      • 元組墓怀,意義何在
        • 有兩個(gè)重要原因,元組是不可替代的
          • 元組可以在映射(和集合的成員)中當(dāng)作鍵使用-- 而列表則不行
          • 元組作為很多內(nèi)建函數(shù)和方法的返回值存在卫键,也就是說(shuō)你必須對(duì)元組進(jìn)行處理捺疼。
            只有不嘗試修改元組,那么“處理”元組在絕大多數(shù)情況下就是把他們當(dāng)作列表來(lái)進(jìn)行操作永罚。

第三章 使用字符串

  1. a
  2. b

第四章 字典:當(dāng)索引不好用時(shí)

  1. dict函數(shù)

    • 可以用 dict啤呼,通過(guò)其他映射(比如其他字典)或者 (鍵,值)這樣的序列建立字典。
      • items = [('name','Gumby'), ('age', 42)]
      • d = dict(items)
      • d
      • {'name':'Gumby', 'age':42}
      • 還可以通過(guò)關(guān)鍵字來(lái)創(chuàng)建字典

      • d = dict(name='Gumby', age=42)
      • d
      • {'age':42, 'name':'Gumby'}
  2. 基本字典操作

    • 字典的基本行為在很多方面與序列(sequence)類似:

    • len(d)

    • d[k]

    • d[k] = v

    • del d[k]

    • k in d

    • 重要區(qū)別

    • 鍵類型: 整數(shù)類型呢袱,或者其他不可變類型官扣,比如:浮點(diǎn)型,字符串或者元組

    • 自動(dòng)添加:可以為不存在的鍵分配值羞福,會(huì)建立新的項(xiàng)惕蹄。

    • 成員資格:表達(dá)式 k in d 查找的是鍵,而不是值治专。

    • 提示: 在字典中檢查成員資格比在列表中更高效卖陵,數(shù)據(jù)越大,差距越明顯张峰。

  3. 字典的格式化字符串

    • phonebook
    • {'Beth':'9102' , 'Cecil':'3258'}
    • "Cecil's phone number is %(Cecil)s." % phonebook
    • "Cecil's phone number is 3258."
  4. 字典方法

    • clear 清楚字典中的所有的項(xiàng)泪蔫。 原地操作,所以無(wú)返回值(或者說(shuō)返回None)

      • x = {}
        - >>> y = x
        - >>> x['key'] = 'v'
        - >>> y
        - {'key': 'v'}
        - >>> x = {}
        - >>> y
        - {'key': 'v'}
        - ###########################
        - >>> x = {}
        - >>> y = x
        - >>> x['key'] = 'v'
        - >>> y
        - {'key': 'v'}
        - >>> x.clear()
        - >>> y
        - {}

    • copy 返回一個(gè)具有相同鍵-值對(duì)的新字典喘批。 (這個(gè)方法實(shí)現(xiàn)的是淺復(fù)制(shallow copy)撩荣,因?yàn)橹当旧砭褪窍嗤模皇歉北荆?/p>

      • x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
        - >>> y = x.copy()
        - >>> y['username'] = 'mlh'
        - >>> y['machines'].remove('bar')
        - >>> y
        - {'username': 'mlh', 'machines': ['foo', 'baz']}
        - >>> x
        - {'username': 'admin', 'machines': ['foo', 'baz']}
        - 可以看到饶深,當(dāng)在副本中替換值的時(shí)候餐曹,原始字典不受影響,但是敌厘,如果修改了某個(gè)值(原地修改台猴,而不是替換),原始的字典也會(huì)改變俱两,因?yàn)橥瑯拥闹狄泊鎯?chǔ)在原字典中饱狂。
        - 避免這個(gè)問(wèn)題的一種方法可以試用深復(fù)制(deep copy)

    • fromkeys 使用給定的鍵建立新的字典,每個(gè)鍵默認(rèn)對(duì)應(yīng)的值為None

      • {}.fromkeys(['name', 'age'])
      • {'aget': None, 'name': None}
      • #######
      • {}.fromkeys(['name', 'age'], 'unknown')
      • {'aget': 'unknown', 'name': 'unknown'}
    • get 是一個(gè)更寬松的訪問(wèn)字典項(xiàng)的方法锋华。 訪問(wèn)不存在的項(xiàng)時(shí)不會(huì)出錯(cuò)

      • d = {}
      • print d.get('name')
      • None
      • 還可以自定義‘默認(rèn)’值

      • print d.get('name' , 'N/A')
      • 'N/A'
    • has_key 檢查字典中是否含有給出的鍵嗡官。相當(dāng)于 k in d. 但python3.0不包括這個(gè)函數(shù)

    • items 和 iteritems

      • items 將所有的字典項(xiàng)以列表方式返回箭窜,列表的每一項(xiàng)都來(lái)自于(鍵毯焕,值).但返回時(shí)沒有特殊順序。
      • iteritems 的作用大致相同,但是會(huì)返回一個(gè)迭代器對(duì)象而不是列表纳猫。
      • 很多情況下使用 iteritems 更高效婆咸。

    • keys 和 iterkeys

      • 將字典中的鍵以列表形式返回
      • iterkeys 則返回針對(duì)鍵的迭代器
    • pop 獲取對(duì)應(yīng)于給定鍵的值,然后將這個(gè)鍵-值對(duì)從字典中刪除芜辕。

      • d = {'x':1, 'y':2}
        - >>> d.pop('x')
        - 1
        - >>> d
        - {'y': 2}
        - >>>

    • popitem 類似于list.pop,后者會(huì)彈出列表的最后一個(gè)元素尚骄。但不同的是,popitem彈出隨機(jī)的項(xiàng)侵续,因?yàn)樽值洳]有'最后的元素'

    • setdefault 類似get方法倔丈,就是能獲取與給定鍵相關(guān)的值,除此之外状蜗,還能在字典中不含有給定鍵的情況下設(shè)定相應(yīng)的鍵值需五。

    • update 可以利用一個(gè)字典項(xiàng)更新另外一個(gè)字典:

      • d = {'x':1, 'y':2}
        - >>> e = {'y':3}
        - >>> d.update(e)
        - >>> d
        - {'y': 3, 'x': 1}

    • values 和 itervalues 以列表的形式返回字典中的值(itervalues返回值的迭代器)。 與返回鍵不同的是轧坎,返回值的列表中可以包含重復(fù)的元素宏邮。

第五章 條件,循環(huán)和其他

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缸血,一起剝皮案震驚了整個(gè)濱河市蜜氨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捎泻,老刑警劉巖飒炎,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笆豁,居然都是意外死亡厌丑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門渔呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怒竿,“玉大人,你說(shuō)我怎么就攤上這事扩氢「郏” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵录豺,是天一觀的道長(zhǎng)朦肘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)双饥,這世上最難降的妖魔是什么媒抠? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮咏花,結(jié)果婚禮上趴生,老公的妹妹穿的比我還像新娘阀趴。我一直安慰自己,他們只是感情好苍匆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布刘急。 她就那樣靜靜地躺著,像睡著了一般浸踩。 火紅的嫁衣襯著肌膚如雪叔汁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天检碗,我揣著相機(jī)與錄音据块,去河邊找鬼。 笑死折剃,一個(gè)胖子當(dāng)著我的面吹牛瑰钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播微驶,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼浪谴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了因苹?” 一聲冷哼從身側(cè)響起苟耻,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扶檐,沒想到半個(gè)月后凶杖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡款筑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年智蝠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奈梳。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杈湾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攘须,到底是詐尸還是另有隱情漆撞,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布于宙,位于F島的核電站浮驳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捞魁。R本人自食惡果不足惜至会,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谱俭。 院中可真熱鬧奉件,春花似錦宵蛀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宣吱。三九已至窃这,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間征候,已是汗流浹背杭攻。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疤坝,地道東北人兆解。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跑揉,于是被迫代替她去往敵國(guó)和親锅睛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容