python列表(list)的使用技巧及高階操作
1、合併列表(extend
)
跟元組一樣,用加號(+
)將兩個列表加起來即可實現合併:
In [1]: x=list(range(1, 13, 2))
In [2]: x + ['b', 'a']
Out[2]: [1, 3, 5, 7, 9, 11, 'b', 'a']
對於已定義的列表,可以用extend
方法一次性新增多個元素:
In [7]: x2=[3, 6, 1]
In [8]: x.extend(x2)
In [9]: x
Out[9]: [1, 3, 5, 7, 9, 11, 3, 6, 1, 3, 6, 1, 3, 6, 1]
需要說明的是:加號(+
)執行列表的合併是非常浪費資源的,因為必須建立一個新列表並將所有物件複製過去,而用extend
將元素附加到現有列表(尤其是在構建一個大列表時)就會好很多。
因此,在進行列表合併操作時,尤其是對於大資料量的列表合併,強烈建議使用extend
函式。
2、列表排序(sort
)
列表的sort
方法可以實現就地排序(無需建立新物件,字串按首字母進行排序):
In [10]: a=[1, 5, 3, -3, 0]
In [11]: a.sort()
In [12]: a
Out[12]: [-3, 0, 1, 3, 5]
In [13]: s=['a','ab','3e','z']
In [14]: s.sort()
In [15]: s
Out[15]: ['3e', 'a', 'ab', 'z']
sort
有幾個很好用的選項,一個是次要排序鍵,即一個能夠產生可用於排序的值的函式。如可以通過長度對一組字串進行排序:
In [16]: b=['a','nl','drz','mowgt','aa']
In [17]: b.sort(key=len)
In [18]: b
Out[18]: ['a', 'nl', 'aa', 'drz', 'mowgt']
再比如是否進行降序排列,如下面通過對首字母進行降序排列的示例:
In [21]: b.sort(key= lambda x:x[0], reverse=True)
In [22]: b
Out[22]: ['nl', 'mowgt', 'drz', 'a', 'aa']
3、 二分搜尋及維護有序列表(bisect
)
內建的bisect
模組實現了二分查詢以及對有序列表的插入操作。bisect.bisect
可以找出新元素應該被插入到哪個位置以保持元列表的有序性,bisect.insort
則將新元素插入到那個正確的位置上。
In [23]: import bisect
In [24]: c=[1,2,1,-1,4,5]
In [25]: c.sort()
In [26]: bisect.bisect(c, 2)
Out[26]: 4
In [27]: bisect.insort(c, 4)
In [28]: c
Out[28]: [-1, 1, 1, 2, 4, 4, 5]
注意:bisect
模組的函式不會判斷原列表是否有序,因為這樣做開銷太大;因此將他們用作無序列表時雖然不會出錯,但可能會導致不正確的結果。基於此,建議在使用bisect
模組的函式前,先對原列表執行排序的操作。
3、切片(索引運算子[]
及start:stop
)
可以對序列型別(陣列、列表、元組等)進行切片操作,start
索引處元素被包括在切片的結果中,stop
索引處的元素未被包括在結果中,元素數量為 stop-start
。start
或stop
都是可以省略的,此時他們分別預設為序列的起始處和結尾處。
還可以在第二個冒號後加上步長(step
),比如每隔一位取一個元素:
In [35]: d=[x for x in range(10)]
In [36]: d
Out[36]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [37]: e=d[:8:2]
In [38]: e
Out[38]: [0, 2, 4, 6]
可以巧妙的使用 -1
,實現對列表或元素的反序,如下:
In [40]: f=d[::-1]
In [41]: f
Out[41]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
4、列表內建的序列函式
4.1 enumerate
enumerate
函式可以逐個返回序列的(i, value)
元組,如下示例:
In [43]: #for i value in enumerate(collection):
In [44]: #用 i, value 做一些事情
In [49]: slist=['qin', 'wang', 'wqc']
In [50]: mapping = dict((v, i) for i, v in enumerate(list))
In [51]: mapping
Out[51]: {'qin': 0, 'wang': 1, 'wqc': 2}
4.2 sorted
sorted
函式可以將任何序列返回為一個新的有序列表(注意:sort
函式是就地排序),如下:
In [59]: sorted(['z', 'd', 'c', 'n'])
Out[59]: ['c', 'd', 'n', 'z']
In [60]: sorted('my name is chaogo')
Out[60]:
[' ',
' ',
' ',
'a',
'a',
'c',
'e',
'g',
'h',
'i',
'm',
'm',
'n',
'o',
'o',
's',
'y']
常常將sorted
和set
結合起來使用以得到一個由序列中的唯一元素構成的有序列表:
In [61]: set(sorted('my name is chaogo'))
Out[61]: {' ', 'a', 'c', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 'y'}
In [62]: sorted(set('my name is chaogo'))
Out[62]: [' ', 'a', 'c', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 'y']
In [63]: set('my name is chaogo')
Out[63]: {' ', 'a', 'c', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 'y'}
上面的結果都是一樣的,什麼原因呢?這是因為:
(1)set
和sorted
是對序列進行操作,當引數不是序列時,會預設轉換為列表;
(2)set
預設會對元素進行排序。
4.3 zip
zip
用於將多個序列(列表、元組等)中的元素“配對”,從而產生一個新的元組列表;
zip
可以接受任意數量的序列,最終得到的元組數量由最短的序列決定;
zip
最常見的用法是同時迭代多個序列,還可以結合enumerate
一起使用,如下:
In [77]: seq1 = ['chao', 'qing', 'wq']
In [78]: seq2 = ['qin', 'wang', 'qc']
In [79]: for i , (a,b) in enumerate(zip(seq1, seq2)):
...: print('%d: %s %s' % (i, a, b))
...:
0: chao qin
1: qing wang
2: wq qc
對於“已壓縮的”(zipped
)序列,zip
還有一個很巧妙的用法,即對該序列進行解壓(unzip
,用*
表示)。其實就是將一組行轉換為一組列,如下:
In [86]: pitchers = [('a','b'), (1,2), ('tmd','bat')]
In [87]: one, two = zip(*pitchers)
In [88]: one
Out[88]: ('a', 1, 'tmd')
In [89]: two
Out[89]: ('b', 2, 'bat')
4.4 reversed
用於按逆序迭代序列中的元素,如下:
In [92]: [x for x in reversed([1, 2, 5, 3, -1])]
Out[92]: [-1, 3, 5, 2, 1]
相關文章
- 11個提升Python列表編碼效率的高階技巧Python
- Python List 列表list()方法Python
- Python 列表(List)Python
- python列表(List)Python
- Python list(列表)Python
- Python 列表 list 陣列 array 常用操作集錦Python陣列
- Python List 列表list()方法分享Python
- Python模組高階技巧Python
- Python List 列表的處理Python
- Python元組、列表、集合及列表去重操作Python
- Python3之字串str、列表list、元組tuple的切片操作Python字串
- Python基礎——while、字串、列表及操作PythonWhile字串
- CSS使用的一些小技巧/高階進階CSS
- C++中list的使用方法及常用list操作總結C++
- Python - list 列表常見方法Python
- python中的列表操作Python
- 收藏,Python 開發中有哪些高階技巧?Python
- [譯] Kotlin 協程高階使用技巧Kotlin
- < Python全景系列-3 > Python控制流程盤點及高階用法、神秘技巧大揭秘!Python
- Python 列表、元組、字典及集合操作詳解Python
- Python資料型別——列表(List)Python資料型別
- python list列表基礎(元組)Python
- 常用JavaScript的高階技巧JavaScript
- Python中函式的高階使用Python函式
- Python列表切片操作Python
- JavaScript 高階技巧JavaScript
- 使用 Google 高階搜尋的一些技巧Go
- 列表及相關操作
- python高階特性:切片/迭代/列表生成式/生成器Python
- python資料庫-mongoDB的高階查詢操作(55)Python資料庫MongoDB
- list列表運算子,列表元素的遍歷,列表的方法,生成列表,巢狀的列表|python自學筆記(四)巢狀Python筆記
- Python 列表操作指南1Python
- Python 列表操作指南3Python
- Python列表操作方法Python
- List Except 操作,IEqualityComparer 使用
- Go語言學習教程:xorm表基本操作及高階操作GoORM
- Python3 列表list合併的4種方法Python
- Python 選列表 list 還是元組 tuple 的思考Python