<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          盤點Python列表生成式的三種方法

          共 2140字,需瀏覽 5分鐘

           ·

          2021-02-06 01:50

          點擊上方“Go語言進階學習”,進行關注

          回復“Go語言”即可獲贈從入門到進階共10本電子書

          興來每獨往,勝事空自知。

          一、前言

          列表生成式即List Comprehensions,是Python內(nè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)太繁瑣,而列表生成式則可以用一行語句代替循環(huán)生成上面的list:

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

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

          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. 運用列表生成式,可以寫出非常簡潔的代碼。

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

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

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

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

          因此,列表生成式也可以使用兩個變量來生成list:

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

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

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

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

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

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

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


          三、練習和思考

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

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

          練習參考代碼 :

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

          運行結(jié)果:

          注:

          運用列表生成式,可以快速生成list,可以通過一個list推導出另一個list,而代碼卻十分簡潔。

          四、總結(jié)

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

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

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

          代碼很簡單,希望對你學習有幫助。

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

          往期精彩文章推薦:

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

          想加入Go學習群請在后臺回復【入群

          萬水千山總是情,點個【在看】行不行

          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产激情AV| 另类综合网 | 开心激情五月天网 | 亚洲天堂无码aV | 大鸡巴操小穴视频 |