- 零基礎入門學習Python(第2版)
- 小甲魚
- 1329字
- 2019-12-20 12:19:39
5.4 序列

視頻講解
聰明的你可能已經發現,小甲魚把列表、元組和字符串放在一塊兒來講解是有道理的,因為它們之間有很多共同點:
? 都可以通過索引得到每一個元素。
? 默認索引值總是從0開始(當然靈活的Python還支持負數索引)。
? 可以通過切片的方法得到一個范圍內的元素的集合。
? 有很多共同的操作符(重復操作符、拼接操作符、成員關系操作符)。
我們把它們統稱為:序列!下面介紹一些關于序列的常用BIF(內建方法)。
1. list([iterable])
list()方法用于把一個可迭代對象轉換為列表,很多讀者可能經常聽到“迭代”這個詞,但要是讓你解釋的時候,卻又可能會含糊其詞了:迭代……迭代不就是for循環嘛……
這里小甲魚幫大家科普一下:所謂迭代,是重復反饋過程的活動,其目的通常是為了接近并達到所需的目標或結果。每一次對過程的重復被稱為一次“迭代”,而每一次迭代得到的結果會被用來作為下一次迭代的初始值……就目前來說,迭代還真的就是一個for循環,但今后會介紹到迭代器,那個功能,才叫驚艷!
好了,這里說list()方法要么不帶參數,要么帶一個可迭代對象作為參數,而這個序列天生就是可迭代對象(迭代這個概念實際上就是從序列中泛化而來的)。
下面仍然通過幾個例子給大家講解一下:
>>> # 創建一個空列表 >>> a = list() >>> a [] >>> # 將字符串的每個字符迭代存放到列表中 >>> b = list("FishC") >>> b ['F', 'i', 's', 'h', 'C'] >>> # 將元組中的每個元素迭代存放到列表中 >>> c = list((1, 1, 2, 3, 5, 8, 13)) >>> c [1, 1, 2, 3, 5, 8, 13]
事實上這個list()方法大家自己也可以動手實現,對不對?很簡單嘛,實現過程大概就是新建一個列表,然后循環通過索引迭代參數的每一個元素并加入列表,迭代完畢后返回列表即可。大家不妨自己動手來嘗試一下。
2. tuple([iterable])
tuple()方法用于把一個可迭代對象轉換為元組,具體的用法和list()一樣,這里就不再贅述了。
3. str(obj)
str()方法用于把obj對象轉換為字符串,這個方法3.9.4節中講過,還記得吧?
4. len(sub)
len()方法前面已經使用過幾次了,該方法用于返回sub參數的長度:
>>> str1 = "I love fishc.com" >>> len(str1) 16 >>> list1 = [1, 1, 2, 3, 5, 8, 13] >>> len(list1) 7 >>> tuple1 = "這", "是", "一", "個", "元祖" >>> len(tuple1) 5
5. max()
max()方法用于返回序列或者參數集合中的最大值,也就是說,max()的參數可以是一個序列,返回值是該序列中的最大值;也可以是多個參數,那么,max()將返回這些參數中最大的一個:
>>> list1 = [1, 18, 13, 0, -98, 34, 54, 76, 32] >>> max(list1) 76 >>> str1 = "I love fishc.com" >>> max(str1) 'v' >>> max(5, 8, 1, 13, 5, 29, 10, 7) 29
6. min()
min()方法跟max()用法一樣,但效果相反:返回序列或者參數集合中的最小值。這里需要注意的是,使用max()方法和min()方法都要保證序列或者參數的數據類型統一,否則會出錯:

俗話說:外行看熱鬧,內行看門道。
不妨分析一下這個報錯信息“TypeError: '<' not supported between instances of 'str' and'int'”,意思是說不能拿字符串和整型進行比較。這說明了什么呢?說明max()方法和min()方法的內部實現事實上類似于之前提到的,通過索引得到每一個元素,然后將各個元素進行對比。
所以,根據上述猜想,可以寫出類似的實現代碼:

由此可見,Python的內置方法其實也沒什么了不起的,仔細思考一下也是可以獨立實現的嘛。所以,只要認真地跟著本書的內容學習下去,很多看似“如狼似虎”的問題,將來都能迎刃而解!
7. sum(iterable[, start])
sum()方法用于返回序列iterable的所有元素值的總和,用法跟max()和min()一樣。但sum()方法有一個可選參數(start),如果設置該參數,表示從該值開始加起,默認值是0:
>>> tuple1 = 1, 2, 3, 4, 5 >>> sum(tuple1) 15 >>> sum(tuple1, 10) 25
8. sorted(iterable, key=None, reverse=False)
sorted()方法用于返回一個排序的列表,大家還記得列表的內建方法sort()嗎?它們的實現效果一致,但列表的內建方法sort()是實現列表原地排序;而sorted()是返回一個排序后的新列表。

9. reversed(sequence)
reversed()方法用于返回逆向迭代序列的值。同樣的道理,實現效果跟列表的內建方法reverse()一致。區別是:列表的內建方法是原地翻轉,而reversed()是返回一個翻轉后的迭代器對象。你沒看錯,它不是返回一個列表,而是返回一個迭代器對象。

10. enumerate(iterable)
enumerate()方法生成由二元組(二元組就是元素數量為2的元組)構成的一個迭代對象,每個二元組由可迭代參數的索引號及其對應的元素組成,舉個例子:

11. zip(iter1 [,iter2 [...]])
zip()方法用于返回由各個可迭代參數共同組成的元組,舉個例子:

- Data Visualization with D3 4.x Cookbook(Second Edition)
- 數據庫程序員面試筆試真題與解析
- Visual Studio 2012 Cookbook
- OpenShift開發指南(原書第2版)
- MATLAB 2020 從入門到精通
- Java Web應用開發技術與案例教程(第2版)
- PLC編程及應用實戰
- NoSQL數據庫原理
- Java網絡編程核心技術詳解(視頻微課版)
- Mastering Xamarin.Forms(Second Edition)
- R數據科學實戰:工具詳解與案例分析
- TypeScript 2.x By Example
- Moodle 3 Administration(Third Edition)
- WildFly Cookbook
- 安卓工程師教你玩轉Android