在編寫程序或者查看別人的程序時(shí),經(jīng)常會(huì)遇到列表生成式,這個(gè)使用起來(lái)并不復(fù)雜,但是非常有用,使我們的代碼更加簡(jiǎn)潔靈活。很多python使用者并不太會(huì)使用它。今天,就給大家詳細(xì)講解列表生成式和生成器表達(dá)式的使用

          ?

          一、列表生成式

          優(yōu)點(diǎn):一行代碼幾乎可以搞定所需要的任何列表

          缺點(diǎn):容易著迷,不易排錯(cuò),不能超過(guò)三個(gè)循環(huán)

          * 用列表推導(dǎo)式能構(gòu)建的任何列表,用別的都可以構(gòu)建,比如for循環(huán)
          * 列表推導(dǎo)式,最多不超過(guò)3個(gè)for循環(huán)。判斷只能用一個(gè)
          ?

          1. 循環(huán)模式:模板:[經(jīng)過(guò)加工的i for i in 可迭代對(duì)象]

          使用for循環(huán)方法
          li = [] for i in range(1,4): li.append('還珠格格第'+str(i)+'部') print(li) #
          ['還珠格格第1部', '還珠格格第2部', '還珠格格第3部']
          第二種寫法
          li = [] for i in range(1,4): li.append('還珠格格第%s部' % i) print(li)
          上面的代碼,可以一行搞定。用列表推導(dǎo)式就可以了
          li = ['還珠格格第%s部' %i for i in range(1,4)] print(li) li = ['還珠格格第{}部'.format(i)
          for i in range(1,4)] # 上下結(jié)果相同 print(li)
          例:求1~10平方結(jié)果
          li = [i ** 2 for i in range(1,11)] print(li) 執(zhí)行輸出:[1, 4, 9, 16, 25, 36, 49,
          64, 81, 100]
          2. 篩選模式:[經(jīng)過(guò)加工的i for i in 可迭代對(duì)象 if 條件 篩選] 
          30以內(nèi)所有能被3整除的數(shù)
          l3 = [i for i in range(1,31) if i % 3 == 0] print(l3)         # [3, 6, 9, 12,
          15, 18, 21, 24, 27, 30] 30以內(nèi)所有能被3整除的數(shù)的平方
          li = [i**2 for i in range(1,31) if i % 3 == 0] print(li)         # [9, 36, 81,
          144, 225, 324, 441, 576, 729, 900] 找到嵌套列表中名字含有兩個(gè)'e'的所有名字
          names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],['
          Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry']] l4 = [name for i in names
          for name in i if name.count('e') == 2 ] print(l4)         # ['Jefferson',
          'Wesley', 'Steven', 'Jennifer']
          常用的是列表推導(dǎo)式

          ?

          字典推導(dǎo)式

          將一個(gè)字典的key和value對(duì)調(diào)
          dict = {'a': 10, 'b': 34} dict_frequency = {dict[k]: k for k in mcase} print
          (dict_frequency) 執(zhí)行輸出:{10: 'a', 34: 'b'}
          相當(dāng)于
          dict = {'a': 10, 'b': 34} dict_frequency = {} for k in dict: dict_frequency[k]=
          dict[k]print(dict_frequency) 如果Key和value是一樣的,不適合上面的代碼
          集合推導(dǎo)式

          計(jì)算列表中每個(gè)值的平方,自帶去重功能
          squared = {x**2 for x in [1, -1, 2]} print(squared) 執(zhí)行輸出:{1, 4} a = {1,1,4}
          print(type(a)) 執(zhí)行輸出:<class 'set'>  結(jié)果是一個(gè)集合,它也是用{}表示的。
          集合和字典是有區(qū)別的:

            有鍵值對(duì)的,是字典,比如{'k1':1,'k1':2}

            沒(méi)有鍵值對(duì)的,是集合,比如{1,2,3,4}

          ?

          二、生成器表達(dá)式

          與列表推導(dǎo)式相同,只是將[ ]改為( )
          l_obj = ('還珠格格第%s部' % i for i in range(1,4)) print(l_obj)
          結(jié)果是一個(gè)生成器對(duì)象:<generator object <genexpr> at 0x000002DDBEBADE60>
          取值使用__next__方法
          l_obj = ('還珠格格第%s部' % i for i in range(1,4)) print(l_obj.__next__()) print
          (l_obj.__next__()) print(l_obj.__next__()) 輸出結(jié)果: 還珠格格第1部 還珠格格第2部 還珠格格第3部
          列表推導(dǎo)式:一目了然,占內(nèi)存

          生成器表達(dá)式: 不便看出,節(jié)省內(nèi)存。

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                奶 啊 嗯高潮了嗯嗯嗯直播 | 四虎精品一区 | 免费草逼网| 欧美精品一区二区三区成人片在线 | 成人影片一级在线看 |