Python列表

#-- coding: utf-8 --
#列表:和數組相似,可以保存任意數量任意類型的python對象,使用中括號包裹。支持切片運算,元素的個數與元素的值都可以改變。
#元組:和列表相似,支持切片運算,可是元素的個數以及元素的值沒法修改。使用括號包裹。
#字典:鍵-值對組成,使用大括號包裹。其實就是HASH表的實現。
#Test the list in the python
#新建列表
l1 = []#新建一個空的list
l2 = [1,2,3,4]#建一個list,索引爲0-3
l3 = ["abc", ["def", "ghi"]]#建一個嵌套的list
print l3
a_list = ['a', 1, ('a', 'b')]
b_list = ['a', 'b', 0, 1, 3]
print a_list
a_list[0:0] = ['hello']
print "在列表的頭部插入一個元素後爲: ", a_list
a_list[1:1] = ["victor"]
print "在列表的第二個位置插入一個元素爲: ", a_list
print b_list
print "切片b_list[1:3]: ", b_list[1:3]#切片,輸出b_list中的第二個到第四個的元素
print "b_list[:3]: ", b_list[:3]
print "b_list[3:]: ",b_list[3:]
print "b_list[:]: ",b_list[:]
#建立連續的list
list1 = range(1,5)
list2 = range(1,10,2)
print "list1: ", list1
print "list2: ", list2
#刪除鏈表的值
for i in range(len(list2)):
    if list2[i] == 9:
        del list2[i]
print "list2中刪除9以後爲: ", list2
#更新
list2[1] = "victor"#更新list2中第二個元素,設置爲「victor」
print "After update the second element: ", list2
#遍歷
print "a_list中的元素依次爲: "
for element in a_list:
    print element
#list的方法
list = []#建立一個空的list
print "最初的list: ", list
#增長
list.append("Hello, ")#向末尾追加元素
print 'append("Hello"): ', list
list.extend(list2)#向末尾追加一個list
print 'extend(list2): ', list
list += list2#在末尾追加一個list
print "list += list2: ", list
#查找
print "The count of 1: ", list.count(1)
print "list.index(1): ", list.index(1)#獲得list中第一次出現1的位置
list.sort()#對list的元素進行排序
print "sort()", list
list.reverse()#對list中的元素進行逆序排列
print "reverse(): ", list
print list.pop()#默認獲得list的最後一個元素並從list中刪除
print "pop(): ", list
list.remove(list[1])#刪除第二個元素,若是知道具體刪除的內容就用remove方法
print "remove(1): ", list
list.insert(1,"Victor")#在第二個位置插入
print 'insert(1,"victor"): ', list
del list[2]#刪除第三個元素,若是不知道具體刪除的內容就用這種方法
print "del list[2]: ",list
print "獲得列表%s的長度%d: " %("a_list", len(a_list))

其中對列表中元素的刪除python

list = [1,1,1,2,3,4]
for i in range(len(list)):
    if list[i] == 1:
        del list[i]

這樣是會報錯的,由於在刪除的時候列表元素的下標發生了變化。數組

能夠使用以下方法刪除:app

list = filter(lambda x:x!=1,list)
#或者
list = [i for i in list if i!=1]

lambda的用法:轉自http://my.oschina.net/davehe/blog/122418 dom

 python容許用lambda來建立匿名函數,匿名是由於不須要以標準的方式來聲明,而def建立的方法是有名稱的,它們主要有2個地方不同函數

     1.lambda表達式返回可調用的函數對象.但不會把這個函數對象賦給一個標識符,而def則會把函數對象賦值給一個變量.spa

     2.lambda 它只是一個表達式,而def是一個語句.net

     對於一些抽象的,不會別的地方再複用的函數,有時候給函數起個名字也是個難題,使用lambda不須要考慮命名的問題。 lambda語句中,冒號前是參數,能夠有多個,用逗號隔開,冒號右邊的返回值。用lambda賦值很是有用,因爲它只是一個表達式,它能夠直接做爲python 列表和元組,字典的成員。code

sum = lambda x: x**2

在lambda這裏沒有辦法用def語句直接代替,由於def是語句,不是表達式不能嵌套在裏面,lambda表達式在":"後只能有一個表達式。也就是說,在def中,用return能夠返回的也能夠放在lambda後面,不能用return返回的也不能定義lambda後面.所以,像if或for或print這種語句就不能用於lambda中,lambda通常只用來定義簡單的函數。orm

 另外lambda函數能夠很好和python中內建filter(),map(),reduce()函數的應用程序結合起來,由於它們都帶了一個可執行的函數對象.對象

1filter(...)

    filter(function or None, sequence) -> list, tuple, or string
給定一個'過濾函數'和一個對象的序列,每一個序列元素都經過這個過濾器進行篩選,保留函數返回爲真的對象.filter函數爲已知的序列的每一個元素調用給定布爾函數.每一個filter返回的非零(true)值元素添加到一個列表中.

   例如使用filter()來得到任意奇數的列表腳本.

from random import randint      
    allNums = []    
    for eachNum in range(10):    
       allNums.append(randint(1,100))    
    print filter(lambda x: x%2,allNums) #使用filter()來移除全部偶數

2.map(...)
    map(function, sequence[, sequence, ...]) -> list

map()內建函數與filter()類似,由於它也能經過函數來處理序列,但map()將函數調用'映射'到每一個序列的元素上,並返回一個含有全部返回值的列表。

     例如,映射函數是給每一個進入的數字加10,而且將這個函數和一個數字的列表傳給map().

map(lambda x:x+10,[0,1,2,3,4,5,6,7,8,9])    
    [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

3.reduce(...)
    reduce(function, sequence[, initial]) -> value

它經過取出序列的頭兩個元素.將他們傳入二元函數來得到一個單一的值來實現.而後又用這個值和序列的下一個元素來得到又一個值,而後繼續直到整個序列的內容都遍歷完畢之後最後的值會被計算出來爲止.

reduce(func,[1,2,3]) 等同於 func(func(1,2),3)

例如:計算從1加到10的和

print 'the total is:',reduce((lambda x,y:x+y),range(1,11))    
    the total is: 55
相關文章
相關標籤/搜索