日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
Python零基礎入門學習:水木書薈圖書
人氣:24

Python零基礎入門學習:水木書薈

Python3入門必備 小甲魚手把手教授Python開發,隨書附送96集免費視頻教程,讓讀者從真實案例中領略Python的真正魅力,讓您輕松快速用python
  • 所屬分類:圖書 >計算機/網絡>程序設計>其他  
  • 作者:[小甲魚]
  • 產品參數:
  • 叢書名:水木書薈
  • 國際刊號:9787302438205
  • 出版社:清華大學出版社
  • 出版時間:2016-11
  • 印刷時間:2016-10-01
  • 版次:1
  • 開本:16開
  • 頁數:--
  • 紙張:膠版紙
  • 包裝:平裝-膠訂
  • 套裝:

內容簡介

《Python零基礎入門學習-水木書薈》適合學習Python3的入門讀者,也適用對編程一無所知,但渴望用編程改變世界的朋友們!《Python零基礎入門學習-水木書薈》提倡理解為主,應用為王。因此,只要有可能,小甲魚(作者)都會通過《Python零基礎入門學習-水木書薈》中生動的實例來讓大家理解概念。

雖然《《Python零基礎入門學習-水木書薈》》是一本入門書籍,但《《Python零基礎入門學習-水木書薈》》的“野心”可并不止于“初級水平”的教學。《《Python零基礎入門學習-水木書薈》》前半部分是基礎的語法特性講解,后半部分圍繞著Python3在爬蟲、Tkinter和游戲開發等實例上的應用。

編程知識深似海,小甲魚沒辦法僅通過《《Python零基礎入門學習-水木書薈》》將所有的知識都灌輸給你,但能夠做到的是培養你對編程的興趣,提高你編寫代碼的水平,以及鍛煉你的自學能力。后,《《Python零基礎入門學習-水木書薈》》貫徹的核心理念是: 實用、好玩,還有參與。

編輯推薦

本書適合入門學習Python3的讀者,也適用于對編程一無所知,但渴望用編程改變世界的朋友!本書提倡理解為主,應用為王。本書前半部分講解Python3的基礎語法和高級特性,后半部分圍繞著Python3在爬蟲、Tkinter和游戲開發等實例上的應用。本書著重培養讀者對編程的興趣,提高你編寫代碼的水平,以及鍛煉讀者的自學能力。后,本書貫徹的核心理念是:實用、好玩,還有參與。

目錄

目錄

第1章就這么愉快地開始吧

1.1獲得Python

1.2從IDLE啟動Python

1.3失敗的嘗試

1.4嘗試點兒新的東西

1.5為什么會這樣

第2章用Python設計及時個游戲

2.1及時個小游戲

2.2縮進

2.3BIF

第3章成為高手前必須知道的一些基礎知識

3.1變量

3.2字符串

3.3原始字符串

3.4長字符串

3.5改進我們的小游戲

3.6條件分支

3.7while循環

3.8引入外援

3.9閑聊數據類型

3.9.1整型

3.9.2浮點型

3.9.3布爾類型

3.9.4類型轉換

3.9.5獲得關于類型的信息

3.10常用操作符

3.10.1算術操作符

3.10.2優先級問題

3.10.3比較操作符

3.10.4邏輯操作符

第4章了不起的分支和循環

4.1分支和循環

4.2課堂小練習

4.3結果分析

4.4Python可以有效避免“懸掛else”

4.5條件表達式(三元操作符)

4.6斷言

4.7while循環語句

4.8for循環語句

4.9range()

4.10break語句

4.11continue語句

第5章列表、元組和字符串

5.1列表: 一個“打了激素”的數組

5.1.1創建列表

5.1.2向列表添加元素

5.1.3從列表中獲取元素

5.1.4從列表刪除元素

5.1.5列表分片

5.1.6列表分片的進階玩法

5.1.7一些常用操作符

5.1.8列表的小伙伴們

5.1.9關于分片“拷貝”概念的補充

5.2元組: 戴上了枷鎖的列表

5.2.1創建和訪問一個元組

5.2.2更新和刪除元組

5.3字符串

5.3.1各種內置方法

5.3.2格式化

5.4序列

第6章函數

6.1Python的樂高積木

6.1.1創建和調用函數

6.1.2函數的參數

6.1.3函數的返回值

6.2靈活即強大

6.2.1形參和實參

6.2.2函數文檔

6.2.3關鍵字參數

6.2.4默認參數

6.2.5收集參數

6.3我的地盤聽我的

6.3.1函數和過程

6.3.2再談談返回值

6.3.3函數變量的作用域

6.4內嵌函數和閉包

6.4.1global關鍵字

6.4.2內嵌函數

6.4.3閉包(closure)

6.5lambda表達式

6.6遞歸

6.6.1遞歸是“神馬”

6.6.2寫一個求階乘的函數

6.6.3這幫小兔崽子

6.6.4漢諾塔

第7章字典和集合

7.1字典: 當索引不好用時

7.1.1創建和訪問字典

7.1.2各種內置方法

7.2集合: 在我的世界里,你就是

7.2.1創建集合

7.2.2訪問集合

7.2.3不可變集合

第8章長期存儲

8.1文件: 因為懂你,所以永恒

8.1.1打開文件

8.1.2文件對象的方法

8.1.3文件的關閉

8.1.4文件的讀取和定位

8.1.5文件的寫入

8.1.6一個任務

8.2文件系統: 介紹一個高大上的東西

8.3pickle: 腌制一缸美味的泡菜

第9章異常處理

9.1你不可能總是對的

9.2tryexcept語句

9.2.1針對不同異常設置多個except

9.2.2對多個異常統一處理

9.2.3捕獲所有異常

9.3tryfinally語句

9.4raise語句

9.5豐富的else語句

9.6簡潔的with語句

第10章圖形用戶界面入門

10.1導入EasyGui

10.2使用EasyGui

10.3修改默認設置

第11章類和對象

11.1給大家介紹對象

11.2對象=屬性 方法

11.3面向對象編程

11.3.1self是什么

11.3.2你聽說過Python的魔法方法嗎

11.3.3公有和私有

11.4繼承

11.4.1調用未綁定的父類方法

11.4.2使用super函數

11.5多重繼承

11.6組合

11.7類、類對象和實例對象

11.8到底什么是綁定

11.9一些相關的BIF

第12章魔法方法

12.1構造和析構

12.1.1__init__(self[, ...])

12.1.2__new__(cls[, ...])

12.1.3__del__(self)

12.2算術運算

12.2.1算術操作符

12.2.2反運算

12.2.3增量賦值運算

12.2.4一元操作符

12.3簡單定制

12.4屬性訪問

12.5描述符(property的原理)

12.6定制序列

12.7迭代器

12.8生成器(亂入)

第13章模塊

13.1模塊就是程序

13.2命名空間

13.3導入模塊

13.4__name__='__main__'

13.5搜索路徑

13.6包

13.7像個極客一樣去思考

第14章論一只爬蟲的自我修養

14.1入門

14.2實戰

14.2.1下載一只貓

14.2.2翻譯文本

14.3隱藏

14.3.1修改UserAgent

14.3.2延遲提交數據

14.3.3使用

14.4Beautiful Soup

14.5正則表達式

14.5.1re模塊

14.5.2通配符

14.5.3反斜杠

14.5.4字符類

14.5.5重復匹配

14.5.6特殊符號及用法

14.5.7元字符

14.5.8貪婪和非貪婪

14.5.9反斜杠 普通字母=特殊含義

14.5.10編譯正則表達式

14.5.11編譯標志

14.5.12實用的方法

14.6異常處理

14.6.1URLError

14.6.2HTTPError

14.6.3處理異常

14.7安裝Scrapy

14.8Scrapy爬蟲之初窺門徑

14.8.1Scrapy框架

14.8.2創建一個Scrapy項目

14.8.3定義Item容器

14.8.4編寫爬蟲

14.8.5爬

14.8.6取

14.8.7在Shell中嘗試Selector選擇器

14.8.8使用XPath

14.8.9提取數據

14.8.10使用item

14.8.11存儲內容

第15章GUI的最終選擇: Tkinter

15.1Tkinter之初體驗

15.2Label組件

15.3Button組件

15.4Checkbutton組件

15.5Radiobutton組件

15.6LabelFrame組件

15.7Entry組件

15.8Listbox組件

15.9Scrollbar組件

15.10Scale組件

15.11Text組件

15.11.1Indexes用法

15.11.2Marks用法

15.11.3Tags用法

15.12Canvas組件

15.13Menu組件

15.14Menubutton組件

15.15OptionMenu組件

15.16Message組件

15.17Spinbox組件

15.18PanedWindow組件

15.19Toplevel組件

15.20事件綁定

15.21事件序列

15.21.1type

15.21.2modifier

15.22Event對象

15.23布局管理器

15.23.1pack

15.23.2grid

15.23.3place

15.24標準對話框

15.24.1messagebox(消息對話框)

15.24.2filedialog(文件對話框)

15.24.3colorchooser(顏色選擇對話框)

第16章Pygame: 游戲開發

16.1安裝Pygame

16.2初步嘗試

16.3解惑

16.3.1什么是Surface對象

16.3.2將一個圖像繪制到另一個圖像上是怎么一回事

16.3.3移動圖像是怎么一回事

16.3.4如何控制游戲的速度

16.3.5Pygame的效率高不高

16.3.6我應該從哪里獲得幫助

16.4事件

16.5提高游戲的顏值

16.5.1顯示模式

16.5.2全屏才是王道

16.5.3使窗口尺寸可變

16.5.4圖像的變換

16.5.5裁剪圖像

16.5.6轉換圖片

16.5.7透明度分析

16.6繪制基本圖形

16.6.1繪制矩形

16.6.2繪制多邊形

16.6.3繪制圓形

16.6.4繪制橢圓形

16.6.5繪制弧線

16.6.6繪制線段

16.7動畫精靈

16.7.1創建精靈

16.7.2移動精靈

16.8碰撞檢測

16.8.1嘗試自己寫碰撞檢測函數

16.8.2sprite模塊提供的碰撞檢測函數

16.8.3實現碰撞檢測

16.9播放聲音和音效

16.10響應鼠標

16.10.1設置鼠標的位置

16.10.2自定義鼠標光標

16.10.3讓小球響應光標的移動頻率

16.11響應鍵盤

16.12結束游戲

16.12.1發生碰撞后獲得隨機速度

16.12.2減少“抖動”現象的發生

16.12.3游戲勝利

16.12.4更好地結束游戲

16.13經典飛機大戰

16.13.1游戲設定

16.13.2主模塊

16.13.3我方飛機

16.13.4響應鍵盤

16.13.5飛行效果

16.13.6敵方飛機

16.13.7提升敵機速度

16.13.8碰撞檢測

16.13.9碰撞檢測

16.13.10一個BUG

16.13.11發射子彈

16.13.12設置敵機“血槽”

16.13.13中彈效果

16.13.14繪制得分

16.13.15暫停游戲

16.13.16控制難度

16.13.17全屏炸彈

16.13.18發放補給包

16.13.19超級子彈

16.13.20三次機會

16.13.21結束畫面

參考文獻

在線預覽

第5章列表、元組和字符串

5.1列表: 一個“打了激素”的數組有時候需要把一堆東西暫時存儲起來,因為它們有某種直接或者間接的聯系,需要把它們放在某種“組”或者“集合”中,因為將來可能用得上。很多接觸過編程的朋友都知道或者聽說過數組。數組這個概念呢,就是把一大堆同種類型的數據挨個兒擺在一塊兒,然后通過數組下標進行索引。但數組有一個基本要求,就是你所放在一起的數據必須類型一致。由于Python的變量沒有數據類型,也就是說,Python是沒有數組的。但是呢,Python加入了更為強大的列表。Python的列表有多強大?如果把數組比作是一個集裝箱的話,那么Python的列表就是一個工廠的倉庫了。列表真的非常有用,基本上所有的Python程序都要使用到列表,包括之前的打飛機游戲,里邊的小飛機可以全部扔到一個列表中統一管理。5.1.1創建列表創建列表和創建普通變量一樣,用中括號括起一堆數據就可以了,數據之間用逗號隔開,這樣一個普普通通的列表就創建成功了:

number = [1, 2, 3, 4, 5]

我們說列表是打了激素的數組不是沒有道理的,可以創建一個魚龍混雜的列表:

mix = [1, "小甲魚", 3.14, [1, 2, 3]]

可以看到上邊這個列表里有整型、字符串、浮點型數據,甚至還可以包含著另一個列表。當然,如果實在想不到要往列表里邊塞什么數據的時候,可以先創建一個空列表:

empty = []

5.1.2向列表添加元素列表相當靈活,所以它的內容不可能總是固定的,現在就來教大家如何向列表添加元素吧。要向列表添加元素,可以使用append()方法:

number = [1, 2, 3, 4, 5]

number.append(6)

number

[1, 2, 3, 4, 5, 6]

可以看到,參數6已經被添加到列表number的末尾了。有讀者可能會問,這個方法調用怎么跟平時的BIF內置函數調用不一樣呢?嗯,因為append()不是一個BIF,它是屬于列表對象的一個方法。中間這個“.”,大家暫時可以理解為范圍的意思: append()這個方法是屬于一個叫作number的列表對象的。關于對象的知識,咱暫時只需要理解這么多,后邊再給大家介紹對象。同理,我們可以把數字7和8添加進去,但是我們發現似乎不能用append()同時添加多個元素:

number.append(7, 8)

Traceback (most recent call last):

File "pyshell#122", line 1, in module

number.append(7, 8)

TypeError: append() takes exactly one argument (2 given)

這時候就可以使用extend()方法向列表末尾添加多個元素:

number.extend(7, 8)

Traceback (most recent call last):

File "pyshell#123", line 1, in module

number.extend(7, 8)

TypeError: extend() takes exactly one argument (2 given)

哎呀,怎么又報錯了呢?!嗯,其實小甲魚是故意的。extend()方法事實上使用一個列表來擴展另一個列表,所以它的參數應該是一個列表:

number.extend([7, 8])

number

[1, 2, 3, 4, 5, 6, 7, 8]

好,我們又再一次向世界證明我們成功了!但是又發現了一個問題,到目前為止,我們都是往列表的末尾添加數據,那如果我想“插隊”呢?當然沒問題,想要往列表的任意位置插入元素,就要使用insert()方法。insert()方法有兩個參數: 及時個參數代表在列表中的位置,第二個參數是在這個位置處插入一個元素。不妨來試一下,讓數字0出現在列表number的最前邊:

number.insert(1, 0)

number

[1, 0, 2, 3, 4, 5, 6, 7, 8]

等等,不是說好插入到及時個位置嗎?怎么插入后0還是排在1的后邊呢?其實是這樣的: 凡是順序索引,Python均從0開始,同時這也是大多數編程語言約定俗成的規范。那么大家知道為什么要用0來表示及時個數嗎?是因為計算機本身就是二進制的,在二進制的世界里只有兩個數: 0和1,當然,0就是二進制里的及時個數了,所以嘛,秉承著這樣的傳統,0也就習慣用于表示及時個數。所以,正確的做法應該是:

number = [1, 2, 3, 4, 5, 6, 7, 8]

number.insert(0, 0)

number

[0, 1, 2, 3, 4, 5, 6, 7, 8]

5.1.3從列表中獲取元素跟數組一樣,可以通過元素的索引值(index)從列表獲取單個元素,注意,列表索引值是從0開始的:

name = ["雞蛋", "鴨蛋", "鵝蛋", "李狗蛋"]

name[0]

'雞蛋'

name[3]

'李狗蛋'

那按照這個方法讓“李狗蛋”和“鴨蛋”的位置互調:

name[1], name[3] = name[3], name[1]

name

['雞蛋', '李狗蛋', '鵝蛋', '鴨蛋']

5.1.4從列表刪除元素從列表刪除元素,這里也介紹三種方法: remove()、del和pop()。先演示一下用remove()刪除元素:

name.remove("李狗蛋")

name

['雞蛋', '鵝蛋', '鴨蛋']

使用remove()刪除元素,你并不需要知道這個元素在列表中的具體位置,只需要知道該元素存在列表中就可以了。如果要刪除的東西根本不在列表中,程序就會報錯:

name.remove("陳鴨蛋")

Traceback (most recent call last):

File "pyshell#138", line 1, in module

name.remove("陳鴨蛋")

ValueError: list.remove(x): x not in list

remove()方法并不能指定刪除某個位置的元素,這時就要用del來實現:

del name[1]

name

['雞蛋', '鴨蛋']

注意,del是一個語句,不是一個列表的方法,所以你不必在它后邊加上小括號()。另外,如果你想刪除整個列表,還可以直接用del加列表名刪除:

del name

name

Traceback (most recent call last):

File "pyshell#142", line 1, in module

name

NameError: name 'name' is not defined

,演示用pop()方法“彈出”元素:

name = ["雞蛋", "鴨蛋", "鵝蛋", "李狗蛋"]

name.pop()

'李狗蛋'

name.pop()

'鵝蛋'

name

['雞蛋', '鴨蛋']

大家看到了,pop()方法默認是彈出列表中的一個元素。但這個pop()方法其實還可以靈活運用,當你為它加上一個索引值作為參數的時候,它會彈出這個索引值對應的元素:

name = ["雞蛋", "鴨蛋", "鵝蛋", "李狗蛋"]

name.pop(2)

'鵝蛋'

name

['雞蛋', '鴨蛋', '李狗蛋']

5.1.5列表分片利用索引值,每次可以從列表獲取一個元素,但是人總是貪心的,如果需要一次性獲取多個元素,有沒有辦法實現呢?利用列表分片(slice),可以方便地實現這個要求:

name = ["雞蛋", "鴨蛋", "鵝蛋", "李狗蛋"]

name[0:2]

['雞蛋', '鴨蛋']

很簡單對吧?只不過是用一個冒號隔開兩個索引值,左邊是開始位置,右邊是結束位置。這里要注意的一點是,結束位置上的元素是不包含的。利用列表分片,得到一個原來列表的拷貝,原來列表并沒有發生改變。列表分片也可以簡寫,我們說過Python就是以簡潔聞名于世,所以你能想到的“便捷方案”,Python的作者以及Python社區的小伙伴們都已經想到了,并付諸實踐,你要做的就是驗證一下是否可行:

name[:2]

['雞蛋', '鴨蛋']

name[1:]

['鴨蛋', '鵝蛋', '李狗蛋']

name[:]

['雞蛋', '鴨蛋', '鵝蛋', '李狗蛋']

如果沒有開始位置,Python會默認開始位置是0。同樣道理,如果要得到從指定索引值到列表末尾的所有元素,把結束位置省去即可。如果沒有放入任何索引值,而只有一個冒號,將得到整個列表的拷貝。再一次強調: 列表分片就是建立原列表的一個拷貝(或者說副本),所以如果你想對列表做出某些修改,但同時還想保持原來的那個列表,那么直接使用分片的方法來獲取拷貝就很方便了。5.1.6列表分片的進階玩法分片操作實際上還可以接收第三個參數,其代表的是步長,默認情況下(不指定它的時候)該值為1,來試試將其改成2會有什么效果?

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

list1[0:9:2]

[1, 3, 5, 7, 9]

如果將步長改成2,那么每前進兩個元素才取一個出來。其實還可以直接寫成list1[::2]。如果步長的值是負數,例如-1,結果會怎樣呢?不妨試試看:

list1[::-1]

[9, 8, 7, 6, 5, 4, 3, 2, 1]

是不是很有意思?這里步長設置為-1,就相當于復制一個反轉的列表。5.1.7一些常用操作符

此前學過的大多數操作符都可以運用到列表上:

list1 = [123]

list2 = [234]

list1 list2

False

list3 = ['abc']

list4 = ['bcd']

list3 list4

True

我們發現列表還是挺聰明的,竟然會懂得比較大小。那如果列表中不止一個元素呢?結果又會如何?

list1 = [123, 456]

list2 = [234, 123]

list1 list2

False

怎么會這樣?list1列表的和是123 456=579,按理應該比list2列表的和234 123=357要大,為什么list1>list2還會返回False呢?思考片刻后得出結論: Python的列表原來并沒有我們想象中那么“智能”(注: 在后邊講“魔法方法”的章節會教大家如何把列表改變得更加聰明),當列表包含多個元素的時候,默認是從及時個元素開始比較,只要有一個PK贏了,就算整個列表贏了。字符串比較也是同樣的道理(字符串比較的是及時個字符對應的ASCII碼值的大小)。我們知道字符串可以用加號( )來進行拼接,用乘號()來復制自身若干次。它們在列表身上也是可以實現的:

list1 = [123, 456]

list2 = [234, 123]

list3 = list1 list2

list3

[123, 456, 234, 123]

加號( )也叫連接操作符,它允許我們把多個列表對象合并在一起,其實就相當于extend()方法實現的效果。一般情況下建議大家使用extend()方法來擴展列表,因為這樣顯得更為規范和專業。另外,連接操作符并不能實現列表添加新元素的操作:

list1 = [123, 456]

list2 = list1 789

Traceback (most recent call last):

File "pyshell#177", line 1, in module

list2 = list1 789

TypeError: can only concatenate list (not "int") to list

所以如果要添加一個元素到列表中,用什么方法?嗯,可以用append()或者insert()方法,希望大家還記得。乘號()也叫重復操作符,重復操作符可以用于列表中:

list1 = [123]

list1 3

[123, 123, 123]

當然復合賦值運算符也可以用于列表:

list1 = 5

list1

[123, 123, 123, 123, 123]

另外有個成員關系操作符大家也不陌生,我們是在談for循環的時候認識它的,成員關系操作符就是in和not in!

list1 = ["小豬", "小貓", "小狗", "小甲魚"]

"小甲魚" in list1

True

"小護士" not in list1

True

之前說過列表里邊可以包含另一個列表,那么對于列表中的列表元素,能不能使用in和not in測試呢?試試便知:

list1 = ["小豬", "小貓", ["小甲魚", "小護士"], "小狗"]

"小甲魚" in list1

False

"小護士" not in list1

True

可見,in和not in只能判斷一個層次的成員關系,這跟break和continue語句只能跳出一個層次的循環是一個道理。那要判斷列表里邊的列表的元素,應該先進入一層列表:

"小甲魚" in list1[2]

True

"小護士" not in list1[2]

False

順便說一下,前面提到使用索引號去訪問列表中的值,那么對于列表中的值,應該如何訪問呢?大家應該猜到了,其實跟C語言訪問二維數組的方法相似:

list1[2][0]

'小甲魚'

5.1.8列表的小伙伴們接下來認識一下列表的小伙伴們,那么列表有多少小伙伴呢?不妨讓Python自己告訴我們:

dir(list)

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

產生了一個熟悉又陌生的列表,很多熟悉的方法似曾相識,例如append()、extend()、insert()、pop()、remove()都是學過的。現在再給大家介紹幾個常用的方法。count()這個方法的作用是計算它的參數在列表中出現的次數:

list1 = [1, 1, 2, 3, 5, 8, 13, 21]

list1.count(1)

2

index()這個方法會返回它的參數在列表中的位置:

list1.index(1)

可以看到,這里是返回及時個目標(1)在list1中的位置,index()方法還有兩個參數,用于限定查找的范圍。因此可以這樣查找第二個目標在list1的位置:

start = list1.index(1) 1

stop = len(list1)

list1.index(1, start, stop)

1

reverse()方法的作用是將整個列表原地翻轉,就是排的放到最前邊,排最前的放到,那么排倒數第二的就排在第二,以此類推:

list1 = [1, 2, 3, 4, 5, 6, 7, 8]

list1.reverse()

list1

[8, 7, 6, 5, 4, 3, 2, 1]

sort()這個方法是用指定的方式對列表的成員進行排序,默認不需要參數,從小到大排隊:

list1 = [8, 9, 3, 5, 2, 6, 10, 1, 0]

list1.sort()

list1

[0, 1, 2, 3, 5, 6, 8, 9, 10]

那如果需要從大到小排隊呢?很簡單,先調用sort()方法,列表會先從小到大排好隊,然后調用reverse()方法原地翻轉就可以啦。什么?太麻煩?好吧,大家真是越來越懶了……很好,大家離天才又近了一步小甲魚個人認為“懶”是創新發明的根源和動力。。其實,sort()這個方法其實有三個參數,其形式為sort(func, key, reverse)。func和key參數用于設置排序的算法和關鍵字,默認是使用歸并排序,算法問題不在這里討論,有興趣的朋友可以看一下小甲魚另一本不錯的教程: 《數據結構和算法》(C語言)。這里要討論sort()方法的第三個參數: reverse,沒錯,就是剛剛學的那個reverse()方法的那個reverse。不過這里作為sort()的一個默認參數,它的默認值是sort(reverse=False),表示不顛倒順序。因此,只需要把False改為True,列表就相當于從大到小排序:

list1 = [8, 9, 3, 5, 2, 6, 10, 1, 0]

list1.sort(reverse=True)

list1

[10, 9, 8, 6, 5, 3, 2, 1, 0]

5.1.9關于分片“拷貝”概念的補充上一節提到使用分片創建列表的拷貝:

list1 = [1, 3, 2, 9, 7, 8]

list2 = list1[:]

list2

[1, 3, 2, 9, 7, 8]

list3 = list1

list3

[1, 3, 2, 9, 7, 8]

看似一樣,對吧?但事實上呢?利用列表的一個小伙伴做以下修改,大家看看差別:

list1.sort()

list1

[1, 2, 3, 7, 8, 9]

list2

[1, 3, 2, 9, 7, 8]

list3

[1, 2, 3, 7, 8, 9]

可以看到list1已經從小到大排好了序,那list2和list3呢?使用分片方式得到的list2很有原則、很有格調,并不會因為list1的改變而改變,這個原理我待會兒跟大家說; 接著看list3……看,真正的墻頭草是list3,它竟然跟著list1改變了,這是為什么呢?不知道大家還記不記得在講解變量的時候說過,Python的變量就像一個標簽,就一個名字而已……還是給大家畫個圖好理解,如圖51所示。

圖51拷貝列表

這下大家應該

網友評論(不代表本站觀點)

免責聲明

更多出版社