簡介
Python 的序列(sequence)通常指一個可迭代的容器,容器中可以存放任意類型的元素。列表和元組這兩種數據類型是最常被用到的序列,python內建序列有六種,除了剛剛有說過的兩種類型之外,還有字符串、Unicode字符串、buffer對像和最后一種xrange對像,這幾種都是不常使用的。本文講解了列表推導式、切片命名、列表元素排序、列表元素分組的使用方法。學習了 Python 基本的列表操作后,學習這些進階的操作,讓我們寫出的代碼更加優雅簡潔和 pythonic 。
列表推導式
當我們想要根據某些規則來構造一個列表時,首先想到的應該是列表推導式。列表推導式簡化了循環操作,例如我們想要從一個原始文件名列表中獲取全部 .py 文件,在沒有列表推導式的情況下,我們通常會這樣做:
file_list = ['foo.py', 'bar.txt', 'spam.py', 'animal.png', 'test.py']py_list = []for file in file_list:if file.endswith('.py'):py_list.append(file)print(py_list)# output['foo.py', 'spam.py', 'test.py']
而如果使用列表推導式則可簡化為:
py_list = [f for f in file_list if f.endswith('.py')]print(py_list)# output['foo.py', 'spam.py', 'test.py']
列表推導式的介紹網上資源很多,不再贅述。這里只強調,當你需要根據某個規則來構造一個列表時,首先應該想一想,能否使用簡潔的列表推導式來實現該需求,否則再回到常規的方式。
為切片命名
Python 的列表切片使用起來非常方便,但有時也會影響代碼可讀性。例如有一個字符串:
record = '..........19.6..........100..........'
19.6 為產品價格,100 為產品數量,那么計算總價格為:
但是如果這樣寫,可能過一段時間我們再來讀代碼時已經忘記了 record[10:14]
、record[24:27]
切出來的究竟是什么?為了解決上述問題,可以給切片命個名來增強可讀性。
record = '..........19.6..........100..........'price = slice(10, 14)count = slice(24, 27)total_price = float(record[price])*int(record[count])
slice 接收的參數格式為 slice(stop)
、slice(start, stop[, step])
。如果只接收了一個參數,則等價于切片語法 [:stop]
,如果接收兩個參數,則等價于切片語法 [start:stop]
,如果接收三個參數,則等價于切片語法 [start:stop:step]
。
排序
排序相關的任務通常由內置函數 sorted 完成。需要排序的元素一般存放在一個列表容器中,列表可以存放任意類型的元素,而 sorted 函數的 key 關鍵字使得我們能夠輕松地指定元素排序的關鍵字,讓排序變得異常簡單。下面將給出幾個常見的排序例子以說明 key 關鍵字的使用方法。注意 Python3 和 Python2 的排序方法不能通用,下面的例子只適用于 Python3 ,Python2 的排序方法未包含在本文中。
新聞熱點
疑難解答