學習日誌---python(列表解析、產生器、字典和集合)

來源:互聯網
上載者:User

標籤:python

產生列表可以用range();

列表解析

對一個序列進行解析產生新的列表;列表解析比for的效能好很多;

a=[x for x in range(0,10) if x > 5]print aa=[x+1 for x in range(0,10) if x > 5]print a

利用列表中的運算式可以得出所需的列表,無需在用for迴圈得到;

雙重嵌套:用更簡便的語句得出裡列表:

a=[(x,y) for x in range(3) for y in range(3)]print a

解析器中提供了很多的內建函數:

filter(function,iter)

fuction是一個函數,只接受一個參數,就是傳進來的iter的這個序列,返回一個過濾後的序列;

返回的值是iter中的值,滿足的返回,fuction為真的返回;

map(function,iter)

function是一個函數,依次接受iter列表中的所有元素,對應傳回值產生一個列表;

def f(x):    return x%5==0def u(x):    return x+1a = filter(f,range(0,100))print aa = map(u,range(0,10))print a

列表解析的缺點就是記憶體效率太低;因此提出了:


產生器運算式

每次只把一個元素載入再返回,與列表解析唯一的文法不同就是用的元括弧,返回的是一個列表頭指標

,得到指標後,需要用for迴圈得出;

a = (x for x in range(0,10) if x%3==0)print afor i in a:    print i

condition為非0時,即為要返回的元素,為0時,則為false


xrange

range的產生器版本,在大範圍的需求下,用這個;和range的用法一樣

for i in xrange(0,9999999):    if i%999==0:        print i


字典和集合

字典

字典是無序的索引值對,基於雜湊表實現,key可以被hash;通過雜湊函數算出雜湊值,而後取值;

可以做建的類型(內容不可變):

一般建議用字串;類執行個體做key,需實現hash方法返回雜湊值,列表和字典不可以做key,因為列表和字典可變;元組可做key,內不可含有列表。。;

可以通過內建的hash()函數,來判斷是否可以做為索引值;

建立字典:{key:value},也可以用dict()工廠函數來建立

a={‘a‘:1,‘b‘:2}print aa=dict(a=‘c‘,b=2)print aprint a.get(‘c‘,‘not exist‘)

dict()函數建立使,key預設是字串,value預設也是,數字可以直接寫;

在不確認字典中是否有鍵時,可以用字典的get方法去取,不會報錯,返回default值,這是一個很安全的操作;

del dict[key]可刪除,dict[‘無‘]=3,若這個鍵沒有,則建立;

尋找鍵:

keys函數返回字典中存在的鍵,返回的是一個列表

a={‘a‘:1,‘b‘:2,‘c‘:3}b = a.keys()print b


集合(set)

a = set([1,2,3])b = list([1,2,3,4])b.append(5)a.add(5)

set集合裡面的值是唯一的,添加元素用add方法,update可以同時更新一組序列;

集合可進行聯合,交集,差集和異或操作。


題目:

設計一個函數zip(lista,listb,repl),輸入兩個列表和預留位置,返回一個新的列表,列表裡面的每一個元素是一個元組,元組的元素是對應同樣順序的在lista和listb中的元素,如果長度不相同,則用預留位置來代替。

def zip(lista,listb,repl):    lena = len(lista)    lenb = len(listb)    length = 0    list = []    if lena < lenb:        length = lena    else:        length = lenb    for i in range(0,length):        list.append((lista[i],listb[i]))    if lena > length:        for i in range(length,lena):            list.append((lista[i],repl))    if lenb > length:        for i in range(length,lenb):            list.append((repl,listb[i]))    print listzip([1,2,3],[4,5,6],"a")zip([1,2,3],[4],"b")



學習日誌---python(列表解析、產生器、字典和集合)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.