1. 程式人生 > >python 列表操作

python 列表操作

list:一種順序儲存結構,序列的一種,列表元素可以是任何型別,類似陣列,引用型別。

格式定義:olist=[1,'str',{'name':'goofy'},...]

定義一個空的list:olist=[]

獲取列表元素個數:len(olist)

刪除一個列表:del olist

刪除一個列表元素:del list[i]

“+”支援:olist1+olist2

列表相關操作:

len([1,'str',])的返回值是2,後面多餘的逗號不能算多了一個元素。

olist.append(x):新增一個元素到鏈尾。

olist.extend(olist):追加一個列表,等價於+=。

olist.insert(i,x):在位置i處插入x,其餘向後退。大於列表長度在最後新增,小於0在開始處新增。

olist.remove(x):刪除值為x的元素,長度減一,不存在丟擲ValueError異常。

olist.reverse():在原序列上反轉,返回值為None。

olist.pop([i]):返回並刪除位置為i的元素,i預設為最後一個元素。

olist.index(i):返回x在列表中第一次出現的位置,不存在丟擲ValueError異常。

olist.count(x):返回x在列表中出現的次數。 

olist.sort():排序。

list操作:快速建立list、新增item、刪除item、重新賦值item、顛倒item順序、檢索item

快捷建立list,兩種方式:split方法、list函式和range函式配合使用。
 

split方法。寫一個字串,字元之間以空格分隔,然後對該字串使用split方法。
a_list = 'a b c d e f g'.spit()  //建立列表['a','b','c','d','e','f','g'],但這種寫法要簡潔很多

list函式和range函式配合使用。可以快速地建立一個非常大的列表。
a_list = list(range(100))   //很方便地建立一個0到99的列表

新增item,四種方式:concatenation、append、extend、insert,後三種方式都是列表的方法。
示例列表a_list = ['a']:
concatenation新增。它新增的是另外一個列表,兩個列表組合成一個新的列表:
a_list = a_list + [2.0,3]  //列表較長時,可能會消耗大量記憶體

append方法新增。它在原列表末尾新增一個item,item型別可以是任意的:
a_list.append('hello')  //在原有列表末尾新增一個型別為字串的item
a_list.append(['hello'])   //在原有列表末尾新增一個型別為列表的item

extend方法新增。它類似於concatenation,只接受列表引數,並把列表中的item分解,然後新增到原有的列表:
a_list.extend('hello')  //在原有列表末尾新增5個字元item,因為它把hello視為列表
a_list.extend(['hello'])  //在原有列表末尾新增1個item

insert方法新增。在原有列表中插入item:
a_list.insert(0,'c')   //在原有列表的0位置新增一個字元
a_list.insert(0.['c'])   //在原有列表的0位置新增一個列表


刪除item,三種方式:del、remove、pop,後兩種方式都是列表的方法。
示例列表:a_list = ['a','b','c','hello']:
del刪除。它按item的索引值或切片進行刪除:
del a_list[0]   //刪除列表的第一個值
del a_list[:2]   //刪除列表的前兩個值。(為什麼不是前三個呢?因為python的列表切片,包含前一個索引,但不包括後一個索引)

remove方法刪除。它不按item索引,而是按照item的值進行刪除:
a_list.remove('a')  //把a從列表中刪除

pop方法刪除。它按item索引值進行刪除,同時返回被刪除的item值;若不指定索引,預設刪除最後一個item:
a_list.pop(1)  //刪除列表的第二個值,並返回被刪除的值
a_list.pop()   //刪除列表的最後一個值,並返回被刪除的值


重新賦值item,對指定索引使用assignment符號進行賦值:
示例列表:a_list = ['a','b','c','hello']:
a_list[1] = 'bbb' //列表的第二個值b,將被替換為bbb


顛倒列表的item順序,reverse方法:
示例列表:a_list = ['a','b','c','hello']:
a_list.reverse()  //列表的item順序將被從後到前重新排列,更改為['hello','c','b','a']


檢索列表的值,四種方式:in、not in、count、index,後兩種方式是列表的方法。
示例列表:a_list = ['a','b','c','hello']:
判斷值是否在列表中,in操作符:
'a' in a_list  //判斷值a是否在列表中,並返回True或False

判斷值是否不在列表,not in操作符:
'a' not in a_list   //判斷a是否不在列表中,並返回True或False

統計指定值在列表中出現的次數,count方法:
a_list.count('a')  //返回a在列表中的出現的次數

檢視指定值在列表中的位置,index方法:
a_list.index('a')   //返回a在列表中每一次出現的位置,預設搜尋整個列表
a_list.index('a',0,3)  //返回a在指定切片內第一次出現的位置


list遍歷:

python的列表list可以用for迴圈進行遍歷,實際開發中發現一個問題,就是遍歷的時候刪除會出錯,例如

l = [1,2,3,4] for i in l:     if i != 4:     l.remove(i) print l 這幾句話本來意圖是想清空列表l,只留元素4,但是實際跑起來並不是那個結果。再看下面,利用index來遍歷刪除列表l l = [1, 2, 3, 4]
for i in range(len(l)):
    if l[i] == 4:
        del l[i]

print l
這樣沒問題,可以遍歷刪除,但是列表l如果變為 l = [1,2,3,4,5] 如果還是按照上面的方法,設想一下,range開始的範圍是0-4,中間遍歷的時候刪除了一個元素4,這個時候列表變成了= [1,2,3,5],這時候就會報錯了,提示下標超出了陣列的表示,原因就是上面說的遍歷的時候刪除了元素 所以python的list在遍歷的時候刪除元素一定要小心 可以使用filter過濾返回新的list l = [1,2,3,4] l = filter(lambda x:x !=4,l) print l 這樣可以安全刪除l中值為4的元素了,filter要求兩個引數,第一個是規則函式,第二個引數要求輸入序列,而lambda這個函式的作用就是產生一個函式,是一種緊湊小函式的寫法,一般簡單的函式可以這麼些 或者可以這樣 l = [1,2,3,4] l = [ i for i in l if i !=4]//同樣產生一個新序列,復值給l print l 或者乾脆建立新的list存放要刪除的元素 l = [1,2,3,4] dellist = [] for i in l:     if i == 4:         dellist.append(i) for i in dellist:     l.remove(i) 這樣也能安全刪除元素 所以要遍歷的時候刪除元素一定要小心,特別是有些操作並不報錯,但卻沒有達到預期的效果 上面說到產生新序列,賦值等等,用python的id()這個內建函式來看物件的id,可以理解為記憶體中的地址,所以有個簡要說明 如果 l = [1,2,3,4] ll = l l.remove(1) print l//肯定是[2,3,4] print ll//這裡會是什麼? 如果用id函式檢視的話就發現 print id(l),id(ll) 打印出相同的號碼,說明他們其實是一個值,也就是說上面的print ll將和l列印的一樣,所以python有這種性質,用的時候注意一下就行了