1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        盤點(diǎn)Python列表生成式的三種方法

        共 2140字,需瀏覽 5分鐘

         ·

        2021-02-06 01:50

        點(diǎn)擊上方“Go語(yǔ)言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

        回復(fù)“Go語(yǔ)言”即可獲贈(zèng)從入門到進(jìn)階共10本電子書

        興來(lái)每獨(dú)往,勝事空自知。

        一、前言

        列表生成式即List Comprehensions,是Python內(nèi)置的非常簡(jiǎn)單卻強(qiáng)大的可以用來(lái)創(chuàng)建list的生成式。


        二、案例分析

        三種方法

        要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。

        print(list(range(1, 11)))

        如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?

        1. 方法一是循環(huán):
        L = []for x in range(1, 11):    L.append(x * x)print(L)

        但是循環(huán)太繁瑣,而列表生成式則可以用一行語(yǔ)句代替循環(huán)生成上面的list:

        print([x * x for x in range(1, 11)])

        寫列表生成式時(shí),把要生成的元素x * x放到前面,后面跟for循環(huán),就可以把list創(chuàng)建出來(lái),十分有用,多寫幾次,很快就可以熟悉這種語(yǔ)法。

        for循環(huán)后面還可以加上if判斷,這樣就可以篩選出僅偶數(shù)的平方:

        for x in range(1, 11):    L.append(x * x)
        print([x * x for x in range(1, 11) if x % 2 == 0])

        2. 使用兩層循環(huán),可以生成全排列
        L = []for x in range(1, 11):    L.append(x * x)
        print( [m + n for m in 'ABC' for n in 'XYZ'])

        三層和三層以上的循環(huán)就很少用到了。

        3. 運(yùn)用列表生成式,可以寫出非常簡(jiǎn)潔的代碼。

        例如,列出當(dāng)前目錄下的所有文件和目錄名,可以通過(guò)一行代碼實(shí)現(xiàn):

        import os  # 導(dǎo)入os模塊,模塊的概念后面講到
        print([d for d in os.listdir('.')]) # os.listdir可以列出文件和目錄

        for循環(huán)其實(shí)可以同時(shí)使用兩個(gè)甚至多個(gè)變量,s比如dict的items()可以同時(shí)迭代key和value:

        d = {'x': 'A', 'y': 'B', 'z': 'C'}for k, v in d.items():    print(k, '=', v)

        因此,列表生成式也可以使用兩個(gè)變量來(lái)生成list:

        d = {'x': 'A', 'y': 'B', 'z': 'C' }print([k + '=' + v for k, v in d.items()]

        最后把一個(gè)list中所有的字符串變成小寫:

        L = ['Hello', 'World', 'IBM', 'Apple']print([s.lower() for s in L])

        如果list中既包含字符串,又包含整數(shù),由于非字符串類型沒(méi)有l(wèi)ower()方法,所以列表生成式會(huì)報(bào)錯(cuò):

        L = ['Hello', 'World', 18, 'Apple', None]print([s.lower() for s in L])

        使用內(nèi)建的isinstance函數(shù)可以判斷一個(gè)變量是不是字符串:

        x = 'abc'y = 123print(isinstance(x, str))
        print(isinstance(y, str))


        三、練習(xí)和思考

        請(qǐng)修改列表生成式,通過(guò)添加if語(yǔ)句保證列表生成式能正確地執(zhí)行。

        # -*- coding: utf-8 -*-L1 = ['Hello', 'World', 18, 'Apple', None]L2=???
        # 期待輸出: ['hello', 'world', 'apple']print(L2)

        練習(xí)參考代碼 :

        L2 =[s.lower() for s in L1 if isinstance(s, str) ]

        運(yùn)行結(jié)果:

        注:

        運(yùn)用列表生成式,可以快速生成list,可以通過(guò)一個(gè)list推導(dǎo)出另一個(gè)list,而代碼卻十分簡(jiǎn)潔。

        四、總結(jié)

        本文基于Python基礎(chǔ),介紹了列表生成式,以案例為主,三種方法進(jìn)行講解。

        分析不同方法的實(shí)現(xiàn)一樣的效果。實(shí)際案例中需要注意的點(diǎn),遇到的難點(diǎn),提供有效的解決方法。最后通過(guò)練習(xí)和思考,對(duì)列表生成式加深理解。

        歡迎大家積極嘗試,有時(shí)候看到別人實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問(wèn)題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。

        代碼很簡(jiǎn)單,希望對(duì)你學(xué)習(xí)有幫助。

        -------------------?End?-------------------

        往期精彩文章推薦:

        歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

        想加入Go學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

        萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

        瀏覽 58
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人免费黄片 | 国产做受91 一片二片 思思热在线观看视频 | 色网直播app | 国产色婷婷亚洲999精品网站 | 操北条麻妃 | 婷婷丁香开心麻豆五月天 | 女十八毛片AAAAAAA片 | 操逼1234 | 国产天堂一区二区三区 | 大香蕉太香蕉成人现现 |