跟元組一樣,用加號(+
)將兩個列表加起來即可實現合併:
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
函式。
列表的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']
內建的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
模組的函式前,先對原列表執行排序的操作。
可以對序列型別(陣列、列表、元組等)進行切片操作,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]
enumerate
函式可以逐個返回序列的(i, value)
元組,如下示例:
in [43]: #for i value in enumerate(collection):
in [44]: #用 i, value 做一些事情
in [49]: slist=['qin', 'wang', 'wqc']
out[51]:
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]:
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]:
上面的結果都是一樣的,什麼原因呢?這是因為:
(1)set
和sorted
是對序列進行操作,當引數不是序列時,會預設轉換為列表;
(2)set
缺省會對元素進行排序。
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), ('***','bat')]
in [87]: one, two = zip(*pitchers)
in [88]: one
out[88]: ('a', 1, '***')
in [89]: two
out[89]: ('b', 2, 'bat')
用於按逆序迭代序列中的元素,如下:
in
[92]: [x for x in reversed([1, 2, 5, 3, -1])]
out[92]: [-1, 3, 5, 2, 1]
list列表的使用
python最常用的資料型別之一,通過列表可以對資料實現最方便的儲存 修改等操作 list1 1,2,3,4,5,6,7,8,9 建立列表 z list 1,2,3,4,5,6,7,8 建立列表 注 列表的下標值是從0開始取值的,想取最後乙個值時,結束位不能是 1,因為結束位的元素不包括,所以只能留...
python中列表list的基本使用
list 1,2,3 list 1,2,3 2 list.extend l 將乙個給定列表中的所有元素都新增到另乙個列表中 list extend 5,6,7 list 1,2,3,4,5,6,7 3 list.insert i,x list.insert 0,9 list 9,1,2,3,4,5,...
python列表(list)使用心得
list test 1,2,3,4,5,6,7 2.新增元素 向列表中新增乙個物件object list test 1,2,3,4,5,6,7,8,9 把乙個序列seq的內容新增到列表中 list test.extend 8,9 list test 1,2,3,4,5,6,7,8,9 3.插入乙個元...