官术网_书友最值得收藏!

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()方法用于返回由各個可迭代參數共同組成的元組,舉個例子:

主站蜘蛛池模板: 遂平县| 聂荣县| 津南区| 岫岩| 蚌埠市| 玛多县| 涡阳县| 准格尔旗| 安阳县| 黄平县| 明水县| 社旗县| 麻栗坡县| 镇安县| 宁晋县| 罗源县| 齐齐哈尔市| 剑河县| 大姚县| 章丘市| 瑞安市| 江华| 和田市| 长寿区| 辉南县| 天峻县| 杭州市| 榆中县| 台州市| 花垣县| 永济市| 山东省| 蓬安县| 兴和县| 确山县| 安乡县| 交口县| 佛坪县| 苍南县| 清原| 曲阳县|